@burdenoff/microfe-planmagnet 2026.1008.1 → 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.
- package/dist/_virtual/__vite-browser-external.js +0 -2
- package/dist/components/MarkdownEditor.js +0 -2
- package/dist/node_modules/@apollo/client/errors/CombinedGraphQLErrors.js +0 -2
- package/dist/node_modules/@apollo/client/errors/ServerError.js +0 -2
- package/dist/node_modules/@apollo/client/errors/utils.js +0 -2
- package/dist/node_modules/clsx/dist/clsx.js +0 -2
- package/dist/node_modules/d3-array/src/ascending.js +0 -2
- package/dist/node_modules/d3-array/src/bisect.js +0 -2
- package/dist/node_modules/d3-array/src/bisector.js +0 -2
- package/dist/node_modules/d3-array/src/descending.js +0 -2
- package/dist/node_modules/d3-array/src/max.js +0 -2
- package/dist/node_modules/d3-array/src/min.js +0 -2
- package/dist/node_modules/d3-array/src/number.js +0 -2
- package/dist/node_modules/d3-array/src/quantile.js +0 -2
- package/dist/node_modules/d3-array/src/quickselect.js +0 -2
- package/dist/node_modules/d3-array/src/range.js +0 -2
- package/dist/node_modules/d3-array/src/sort.js +0 -2
- package/dist/node_modules/d3-array/src/ticks.js +0 -2
- package/dist/node_modules/d3-color/src/color.js +0 -2
- package/dist/node_modules/d3-color/src/define.js +0 -2
- package/dist/node_modules/d3-format/src/defaultLocale.js +0 -2
- package/dist/node_modules/d3-format/src/exponent.js +0 -2
- package/dist/node_modules/d3-format/src/formatDecimal.js +0 -2
- package/dist/node_modules/d3-format/src/formatGroup.js +0 -2
- package/dist/node_modules/d3-format/src/formatNumerals.js +0 -2
- package/dist/node_modules/d3-format/src/formatPrefixAuto.js +0 -2
- package/dist/node_modules/d3-format/src/formatRounded.js +0 -2
- package/dist/node_modules/d3-format/src/formatSpecifier.js +0 -2
- package/dist/node_modules/d3-format/src/formatTrim.js +0 -2
- package/dist/node_modules/d3-format/src/formatTypes.js +0 -2
- package/dist/node_modules/d3-format/src/identity.js +0 -2
- package/dist/node_modules/d3-format/src/locale.js +0 -2
- package/dist/node_modules/d3-format/src/precisionFixed.js +0 -2
- package/dist/node_modules/d3-format/src/precisionPrefix.js +0 -2
- package/dist/node_modules/d3-format/src/precisionRound.js +0 -2
- package/dist/node_modules/d3-interpolate/src/array.js +0 -2
- package/dist/node_modules/d3-interpolate/src/basis.js +0 -2
- package/dist/node_modules/d3-interpolate/src/basisClosed.js +0 -2
- package/dist/node_modules/d3-interpolate/src/color.js +0 -2
- package/dist/node_modules/d3-interpolate/src/constant.js +0 -2
- package/dist/node_modules/d3-interpolate/src/date.js +0 -2
- package/dist/node_modules/d3-interpolate/src/number.js +0 -2
- package/dist/node_modules/d3-interpolate/src/numberArray.js +0 -2
- package/dist/node_modules/d3-interpolate/src/object.js +0 -2
- package/dist/node_modules/d3-interpolate/src/piecewise.js +0 -2
- package/dist/node_modules/d3-interpolate/src/rgb.js +0 -2
- package/dist/node_modules/d3-interpolate/src/round.js +0 -2
- package/dist/node_modules/d3-interpolate/src/string.js +0 -2
- package/dist/node_modules/d3-interpolate/src/value.js +0 -2
- package/dist/node_modules/d3-path/src/path.js +0 -2
- package/dist/node_modules/d3-scale/src/band.js +0 -2
- package/dist/node_modules/d3-scale/src/constant.js +0 -2
- package/dist/node_modules/d3-scale/src/continuous.js +0 -2
- package/dist/node_modules/d3-scale/src/diverging.js +0 -2
- package/dist/node_modules/d3-scale/src/identity.js +0 -2
- package/dist/node_modules/d3-scale/src/init.js +0 -2
- package/dist/node_modules/d3-scale/src/linear.js +0 -2
- package/dist/node_modules/d3-scale/src/log.js +0 -2
- package/dist/node_modules/d3-scale/src/nice.js +0 -2
- package/dist/node_modules/d3-scale/src/number.js +0 -2
- package/dist/node_modules/d3-scale/src/ordinal.js +0 -2
- package/dist/node_modules/d3-scale/src/pow.js +0 -2
- package/dist/node_modules/d3-scale/src/quantile.js +0 -2
- package/dist/node_modules/d3-scale/src/quantize.js +0 -2
- package/dist/node_modules/d3-scale/src/radial.js +0 -2
- package/dist/node_modules/d3-scale/src/sequential.js +0 -2
- package/dist/node_modules/d3-scale/src/sequentialQuantile.js +0 -2
- package/dist/node_modules/d3-scale/src/symlog.js +0 -2
- package/dist/node_modules/d3-scale/src/threshold.js +0 -2
- package/dist/node_modules/d3-scale/src/tickFormat.js +0 -2
- package/dist/node_modules/d3-scale/src/time.js +0 -2
- package/dist/node_modules/d3-scale/src/utcTime.js +0 -2
- package/dist/node_modules/d3-shape/src/area.js +0 -2
- package/dist/node_modules/d3-shape/src/array.js +0 -2
- package/dist/node_modules/d3-shape/src/constant.js +0 -2
- package/dist/node_modules/d3-shape/src/curve/basis.js +0 -2
- package/dist/node_modules/d3-shape/src/curve/basisClosed.js +0 -2
- package/dist/node_modules/d3-shape/src/curve/basisOpen.js +0 -2
- package/dist/node_modules/d3-shape/src/curve/bump.js +0 -2
- package/dist/node_modules/d3-shape/src/curve/linear.js +0 -2
- package/dist/node_modules/d3-shape/src/curve/linearClosed.js +0 -2
- package/dist/node_modules/d3-shape/src/curve/monotone.js +0 -2
- package/dist/node_modules/d3-shape/src/curve/natural.js +0 -2
- package/dist/node_modules/d3-shape/src/curve/step.js +0 -2
- package/dist/node_modules/d3-shape/src/line.js +0 -2
- package/dist/node_modules/d3-shape/src/math.js +0 -2
- package/dist/node_modules/d3-shape/src/noop.js +0 -2
- package/dist/node_modules/d3-shape/src/offset/expand.js +0 -2
- package/dist/node_modules/d3-shape/src/offset/none.js +0 -2
- package/dist/node_modules/d3-shape/src/offset/silhouette.js +0 -2
- package/dist/node_modules/d3-shape/src/offset/wiggle.js +0 -2
- package/dist/node_modules/d3-shape/src/order/none.js +0 -2
- package/dist/node_modules/d3-shape/src/path.js +0 -2
- package/dist/node_modules/d3-shape/src/point.js +0 -2
- package/dist/node_modules/d3-shape/src/stack.js +0 -2
- package/dist/node_modules/d3-shape/src/symbol/circle.js +0 -2
- package/dist/node_modules/d3-shape/src/symbol/cross.js +0 -2
- package/dist/node_modules/d3-shape/src/symbol/diamond.js +0 -2
- package/dist/node_modules/d3-shape/src/symbol/square.js +0 -2
- package/dist/node_modules/d3-shape/src/symbol/star.js +0 -2
- package/dist/node_modules/d3-shape/src/symbol/triangle.js +0 -2
- package/dist/node_modules/d3-shape/src/symbol/wye.js +0 -2
- package/dist/node_modules/d3-shape/src/symbol.js +0 -2
- package/dist/node_modules/d3-time/src/day.js +0 -2
- package/dist/node_modules/d3-time/src/duration.js +0 -2
- package/dist/node_modules/d3-time/src/hour.js +0 -2
- package/dist/node_modules/d3-time/src/interval.js +0 -2
- package/dist/node_modules/d3-time/src/millisecond.js +0 -2
- package/dist/node_modules/d3-time/src/minute.js +0 -2
- package/dist/node_modules/d3-time/src/month.js +0 -2
- package/dist/node_modules/d3-time/src/second.js +0 -2
- package/dist/node_modules/d3-time/src/ticks.js +0 -2
- package/dist/node_modules/d3-time/src/week.js +0 -2
- package/dist/node_modules/d3-time/src/year.js +0 -2
- package/dist/node_modules/d3-time-format/src/defaultLocale.js +0 -2
- package/dist/node_modules/d3-time-format/src/locale.js +0 -2
- package/dist/node_modules/decimal.js-light/decimal.js +0 -2
- package/dist/node_modules/eventemitter3/index.js +0 -2
- package/dist/node_modules/fast-equals/dist/es/index.js +0 -2
- package/dist/node_modules/fflate/esm/browser.js +0 -2
- package/dist/node_modules/internmap/src/index.js +0 -2
- package/dist/node_modules/jszip/dist/jszip.min.js +0 -2
- package/dist/node_modules/lodash/_DataView.js +0 -2
- package/dist/node_modules/lodash/_Hash.js +0 -2
- package/dist/node_modules/lodash/_ListCache.js +0 -2
- package/dist/node_modules/lodash/_Map.js +0 -2
- package/dist/node_modules/lodash/_MapCache.js +0 -2
- package/dist/node_modules/lodash/_Promise.js +0 -2
- package/dist/node_modules/lodash/_Set.js +0 -2
- package/dist/node_modules/lodash/_SetCache.js +0 -2
- package/dist/node_modules/lodash/_Stack.js +0 -2
- package/dist/node_modules/lodash/_Symbol.js +0 -2
- package/dist/node_modules/lodash/_Uint8Array.js +0 -2
- package/dist/node_modules/lodash/_WeakMap.js +0 -2
- package/dist/node_modules/lodash/_apply.js +0 -2
- package/dist/node_modules/lodash/_arrayEach.js +0 -2
- package/dist/node_modules/lodash/_arrayEvery.js +0 -2
- package/dist/node_modules/lodash/_arrayFilter.js +0 -2
- package/dist/node_modules/lodash/_arrayIncludes.js +0 -2
- package/dist/node_modules/lodash/_arrayIncludesWith.js +0 -2
- package/dist/node_modules/lodash/_arrayLikeKeys.js +0 -2
- package/dist/node_modules/lodash/_arrayMap.js +0 -2
- package/dist/node_modules/lodash/_arrayPush.js +0 -2
- package/dist/node_modules/lodash/_arraySome.js +0 -2
- package/dist/node_modules/lodash/_asciiToArray.js +0 -2
- package/dist/node_modules/lodash/_assignValue.js +0 -2
- package/dist/node_modules/lodash/_assocIndexOf.js +0 -2
- package/dist/node_modules/lodash/_baseAssign.js +0 -2
- package/dist/node_modules/lodash/_baseAssignIn.js +0 -2
- package/dist/node_modules/lodash/_baseAssignValue.js +0 -2
- package/dist/node_modules/lodash/_baseClone.js +0 -2
- package/dist/node_modules/lodash/_baseCreate.js +0 -2
- package/dist/node_modules/lodash/_baseEach.js +0 -2
- package/dist/node_modules/lodash/_baseEvery.js +0 -2
- package/dist/node_modules/lodash/_baseExtremum.js +0 -2
- package/dist/node_modules/lodash/_baseFindIndex.js +0 -2
- package/dist/node_modules/lodash/_baseFlatten.js +0 -2
- package/dist/node_modules/lodash/_baseFor.js +0 -2
- package/dist/node_modules/lodash/_baseForOwn.js +0 -2
- package/dist/node_modules/lodash/_baseGet.js +0 -2
- package/dist/node_modules/lodash/_baseGetAllKeys.js +0 -2
- package/dist/node_modules/lodash/_baseGetTag.js +0 -2
- package/dist/node_modules/lodash/_baseGt.js +0 -2
- package/dist/node_modules/lodash/_baseHasIn.js +0 -2
- package/dist/node_modules/lodash/_baseIndexOf.js +0 -2
- package/dist/node_modules/lodash/_baseIsArguments.js +0 -2
- package/dist/node_modules/lodash/_baseIsEqual.js +0 -2
- package/dist/node_modules/lodash/_baseIsEqualDeep.js +0 -2
- package/dist/node_modules/lodash/_baseIsMap.js +0 -2
- package/dist/node_modules/lodash/_baseIsMatch.js +0 -2
- package/dist/node_modules/lodash/_baseIsNaN.js +0 -2
- package/dist/node_modules/lodash/_baseIsNative.js +0 -2
- package/dist/node_modules/lodash/_baseIsSet.js +0 -2
- package/dist/node_modules/lodash/_baseIsTypedArray.js +0 -2
- package/dist/node_modules/lodash/_baseIteratee.js +0 -2
- package/dist/node_modules/lodash/_baseKeys.js +0 -2
- package/dist/node_modules/lodash/_baseKeysIn.js +0 -2
- package/dist/node_modules/lodash/_baseLt.js +0 -2
- package/dist/node_modules/lodash/_baseMap.js +0 -2
- package/dist/node_modules/lodash/_baseMatches.js +0 -2
- package/dist/node_modules/lodash/_baseMatchesProperty.js +0 -2
- package/dist/node_modules/lodash/_baseOrderBy.js +0 -2
- package/dist/node_modules/lodash/_baseProperty.js +0 -2
- package/dist/node_modules/lodash/_basePropertyDeep.js +0 -2
- package/dist/node_modules/lodash/_baseRange.js +0 -2
- package/dist/node_modules/lodash/_baseRest.js +0 -2
- package/dist/node_modules/lodash/_baseSetToString.js +0 -2
- package/dist/node_modules/lodash/_baseSlice.js +0 -2
- package/dist/node_modules/lodash/_baseSome.js +0 -2
- package/dist/node_modules/lodash/_baseSortBy.js +0 -2
- package/dist/node_modules/lodash/_baseSum.js +0 -2
- package/dist/node_modules/lodash/_baseTimes.js +0 -2
- package/dist/node_modules/lodash/_baseToString.js +0 -2
- package/dist/node_modules/lodash/_baseTrim.js +0 -2
- package/dist/node_modules/lodash/_baseUnary.js +0 -2
- package/dist/node_modules/lodash/_baseUniq.js +0 -2
- package/dist/node_modules/lodash/_baseUnset.js +0 -2
- package/dist/node_modules/lodash/_cacheHas.js +0 -2
- package/dist/node_modules/lodash/_castPath.js +0 -2
- package/dist/node_modules/lodash/_castSlice.js +0 -2
- package/dist/node_modules/lodash/_cloneArrayBuffer.js +0 -2
- package/dist/node_modules/lodash/_cloneBuffer.js +0 -2
- package/dist/node_modules/lodash/_cloneDataView.js +0 -2
- package/dist/node_modules/lodash/_cloneRegExp.js +0 -2
- package/dist/node_modules/lodash/_cloneSymbol.js +0 -2
- package/dist/node_modules/lodash/_cloneTypedArray.js +0 -2
- package/dist/node_modules/lodash/_compareAscending.js +0 -2
- package/dist/node_modules/lodash/_compareMultiple.js +0 -2
- package/dist/node_modules/lodash/_copyArray.js +0 -2
- package/dist/node_modules/lodash/_copyObject.js +0 -2
- package/dist/node_modules/lodash/_copySymbols.js +0 -2
- package/dist/node_modules/lodash/_copySymbolsIn.js +0 -2
- package/dist/node_modules/lodash/_coreJsData.js +0 -2
- package/dist/node_modules/lodash/_createBaseEach.js +0 -2
- package/dist/node_modules/lodash/_createBaseFor.js +0 -2
- package/dist/node_modules/lodash/_createCaseFirst.js +0 -2
- package/dist/node_modules/lodash/_createFind.js +0 -2
- package/dist/node_modules/lodash/_createRange.js +0 -2
- package/dist/node_modules/lodash/_createSet.js +0 -2
- package/dist/node_modules/lodash/_customOmitClone.js +0 -2
- package/dist/node_modules/lodash/_defineProperty.js +0 -2
- package/dist/node_modules/lodash/_equalArrays.js +0 -2
- package/dist/node_modules/lodash/_equalByTag.js +0 -2
- package/dist/node_modules/lodash/_equalObjects.js +0 -2
- package/dist/node_modules/lodash/_flatRest.js +0 -2
- package/dist/node_modules/lodash/_freeGlobal.js +0 -2
- package/dist/node_modules/lodash/_getAllKeys.js +0 -2
- package/dist/node_modules/lodash/_getAllKeysIn.js +0 -2
- package/dist/node_modules/lodash/_getMapData.js +0 -2
- package/dist/node_modules/lodash/_getMatchData.js +0 -2
- package/dist/node_modules/lodash/_getNative.js +0 -2
- package/dist/node_modules/lodash/_getPrototype.js +0 -2
- package/dist/node_modules/lodash/_getRawTag.js +0 -2
- package/dist/node_modules/lodash/_getSymbols.js +0 -2
- package/dist/node_modules/lodash/_getSymbolsIn.js +0 -2
- package/dist/node_modules/lodash/_getTag.js +0 -2
- package/dist/node_modules/lodash/_getValue.js +0 -2
- package/dist/node_modules/lodash/_hasPath.js +0 -2
- package/dist/node_modules/lodash/_hasUnicode.js +0 -2
- package/dist/node_modules/lodash/_hashClear.js +0 -2
- package/dist/node_modules/lodash/_hashDelete.js +0 -2
- package/dist/node_modules/lodash/_hashGet.js +0 -2
- package/dist/node_modules/lodash/_hashHas.js +0 -2
- package/dist/node_modules/lodash/_hashSet.js +0 -2
- package/dist/node_modules/lodash/_initCloneArray.js +0 -2
- package/dist/node_modules/lodash/_initCloneByTag.js +0 -2
- package/dist/node_modules/lodash/_initCloneObject.js +0 -2
- package/dist/node_modules/lodash/_isFlattenable.js +0 -2
- package/dist/node_modules/lodash/_isIndex.js +0 -2
- package/dist/node_modules/lodash/_isIterateeCall.js +0 -2
- package/dist/node_modules/lodash/_isKey.js +0 -2
- package/dist/node_modules/lodash/_isKeyable.js +0 -2
- package/dist/node_modules/lodash/_isMasked.js +0 -2
- package/dist/node_modules/lodash/_isPrototype.js +0 -2
- package/dist/node_modules/lodash/_isStrictComparable.js +0 -2
- package/dist/node_modules/lodash/_listCacheClear.js +0 -2
- package/dist/node_modules/lodash/_listCacheDelete.js +0 -2
- package/dist/node_modules/lodash/_listCacheGet.js +0 -2
- package/dist/node_modules/lodash/_listCacheHas.js +0 -2
- package/dist/node_modules/lodash/_listCacheSet.js +0 -2
- package/dist/node_modules/lodash/_mapCacheClear.js +0 -2
- package/dist/node_modules/lodash/_mapCacheDelete.js +0 -2
- package/dist/node_modules/lodash/_mapCacheGet.js +0 -2
- package/dist/node_modules/lodash/_mapCacheHas.js +0 -2
- package/dist/node_modules/lodash/_mapCacheSet.js +0 -2
- package/dist/node_modules/lodash/_mapToArray.js +0 -2
- package/dist/node_modules/lodash/_matchesStrictComparable.js +0 -2
- package/dist/node_modules/lodash/_memoizeCapped.js +0 -2
- package/dist/node_modules/lodash/_nativeCreate.js +0 -2
- package/dist/node_modules/lodash/_nativeKeys.js +0 -2
- package/dist/node_modules/lodash/_nativeKeysIn.js +0 -2
- package/dist/node_modules/lodash/_nodeUtil.js +0 -2
- package/dist/node_modules/lodash/_objectToString.js +0 -2
- package/dist/node_modules/lodash/_overArg.js +0 -2
- package/dist/node_modules/lodash/_overRest.js +0 -2
- package/dist/node_modules/lodash/_parent.js +0 -2
- package/dist/node_modules/lodash/_root.js +0 -2
- package/dist/node_modules/lodash/_setCacheAdd.js +0 -2
- package/dist/node_modules/lodash/_setCacheHas.js +0 -2
- package/dist/node_modules/lodash/_setToArray.js +0 -2
- package/dist/node_modules/lodash/_setToString.js +0 -2
- package/dist/node_modules/lodash/_shortOut.js +0 -2
- package/dist/node_modules/lodash/_stackClear.js +0 -2
- package/dist/node_modules/lodash/_stackDelete.js +0 -2
- package/dist/node_modules/lodash/_stackGet.js +0 -2
- package/dist/node_modules/lodash/_stackHas.js +0 -2
- package/dist/node_modules/lodash/_stackSet.js +0 -2
- package/dist/node_modules/lodash/_strictIndexOf.js +0 -2
- package/dist/node_modules/lodash/_stringToArray.js +0 -2
- package/dist/node_modules/lodash/_stringToPath.js +0 -2
- package/dist/node_modules/lodash/_toKey.js +0 -2
- package/dist/node_modules/lodash/_toSource.js +0 -2
- package/dist/node_modules/lodash/_trimmedEndIndex.js +0 -2
- package/dist/node_modules/lodash/_unicodeToArray.js +0 -2
- package/dist/node_modules/lodash/constant.js +0 -2
- package/dist/node_modules/lodash/debounce.js +0 -2
- package/dist/node_modules/lodash/eq.js +0 -2
- package/dist/node_modules/lodash/every.js +0 -2
- package/dist/node_modules/lodash/find.js +0 -2
- package/dist/node_modules/lodash/findIndex.js +0 -2
- package/dist/node_modules/lodash/flatMap.js +0 -2
- package/dist/node_modules/lodash/flatten.js +0 -2
- package/dist/node_modules/lodash/get.js +0 -2
- package/dist/node_modules/lodash/hasIn.js +0 -2
- package/dist/node_modules/lodash/identity.js +0 -2
- package/dist/node_modules/lodash/isArguments.js +0 -2
- package/dist/node_modules/lodash/isArray.js +0 -2
- package/dist/node_modules/lodash/isArrayLike.js +0 -2
- package/dist/node_modules/lodash/isBoolean.js +0 -2
- package/dist/node_modules/lodash/isBuffer.js +0 -2
- package/dist/node_modules/lodash/isEqual.js +0 -2
- package/dist/node_modules/lodash/isFunction.js +0 -2
- package/dist/node_modules/lodash/isLength.js +0 -2
- package/dist/node_modules/lodash/isMap.js +0 -2
- package/dist/node_modules/lodash/isNaN.js +0 -2
- package/dist/node_modules/lodash/isNil.js +0 -2
- package/dist/node_modules/lodash/isNumber.js +0 -2
- package/dist/node_modules/lodash/isObject.js +0 -2
- package/dist/node_modules/lodash/isObjectLike.js +0 -2
- package/dist/node_modules/lodash/isPlainObject.js +0 -2
- package/dist/node_modules/lodash/isSet.js +0 -2
- package/dist/node_modules/lodash/isString.js +0 -2
- package/dist/node_modules/lodash/isSymbol.js +0 -2
- package/dist/node_modules/lodash/isTypedArray.js +0 -2
- package/dist/node_modules/lodash/keys.js +0 -2
- package/dist/node_modules/lodash/keysIn.js +0 -2
- package/dist/node_modules/lodash/last.js +0 -2
- package/dist/node_modules/lodash/map.js +0 -2
- package/dist/node_modules/lodash/mapValues.js +0 -2
- package/dist/node_modules/lodash/max.js +0 -2
- package/dist/node_modules/lodash/maxBy.js +0 -2
- package/dist/node_modules/lodash/memoize.js +0 -2
- package/dist/node_modules/lodash/min.js +0 -2
- package/dist/node_modules/lodash/noop.js +0 -2
- package/dist/node_modules/lodash/now.js +0 -2
- package/dist/node_modules/lodash/omit.js +0 -2
- package/dist/node_modules/lodash/property.js +0 -2
- package/dist/node_modules/lodash/range.js +0 -2
- package/dist/node_modules/lodash/some.js +0 -2
- package/dist/node_modules/lodash/sortBy.js +0 -2
- package/dist/node_modules/lodash/stubArray.js +0 -2
- package/dist/node_modules/lodash/stubFalse.js +0 -2
- package/dist/node_modules/lodash/sumBy.js +0 -2
- package/dist/node_modules/lodash/throttle.js +0 -2
- package/dist/node_modules/lodash/toFinite.js +0 -2
- package/dist/node_modules/lodash/toInteger.js +0 -2
- package/dist/node_modules/lodash/toNumber.js +0 -2
- package/dist/node_modules/lodash/toString.js +0 -2
- package/dist/node_modules/lodash/uniqBy.js +0 -2
- package/dist/node_modules/lodash/upperFirst.js +0 -2
- package/dist/node_modules/object-assign/index.js +0 -2
- package/dist/node_modules/pptxgenjs/dist/pptxgen.es.js +0 -2
- package/dist/node_modules/prop-types/checkPropTypes.js +0 -2
- package/dist/node_modules/prop-types/factoryWithThrowingShims.js +0 -2
- package/dist/node_modules/prop-types/factoryWithTypeCheckers.js +0 -2
- package/dist/node_modules/prop-types/index.js +0 -2
- package/dist/node_modules/prop-types/lib/ReactPropTypesSecret.js +0 -2
- package/dist/node_modules/prop-types/lib/has.js +0 -2
- package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js +0 -2
- package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.production.min.js +0 -2
- package/dist/node_modules/prop-types/node_modules/react-is/index.js +0 -2
- package/dist/node_modules/react-is/cjs/react-is.development.js +0 -2
- package/dist/node_modules/react-is/cjs/react-is.production.min.js +0 -2
- package/dist/node_modules/react-is/index.js +0 -2
- package/dist/node_modules/react-smooth/es6/Animate.js +0 -2
- package/dist/node_modules/react-smooth/es6/AnimateManager.js +0 -2
- package/dist/node_modules/react-smooth/es6/configUpdate.js +0 -2
- package/dist/node_modules/react-smooth/es6/easing.js +0 -2
- package/dist/node_modules/react-smooth/es6/index.js +0 -2
- package/dist/node_modules/react-smooth/es6/setRafTimeout.js +0 -2
- package/dist/node_modules/react-smooth/es6/util.js +0 -2
- package/dist/node_modules/recharts/es6/cartesian/Area.js +0 -2
- package/dist/node_modules/recharts/es6/cartesian/Bar.js +0 -2
- package/dist/node_modules/recharts/es6/cartesian/Brush.js +0 -2
- package/dist/node_modules/recharts/es6/cartesian/CartesianAxis.js +0 -2
- package/dist/node_modules/recharts/es6/cartesian/CartesianGrid.js +0 -2
- package/dist/node_modules/recharts/es6/cartesian/ErrorBar.js +0 -2
- package/dist/node_modules/recharts/es6/cartesian/Line.js +0 -2
- package/dist/node_modules/recharts/es6/cartesian/ReferenceArea.js +0 -2
- package/dist/node_modules/recharts/es6/cartesian/ReferenceDot.js +0 -2
- package/dist/node_modules/recharts/es6/cartesian/ReferenceLine.js +0 -2
- package/dist/node_modules/recharts/es6/cartesian/XAxis.js +0 -2
- package/dist/node_modules/recharts/es6/cartesian/YAxis.js +0 -2
- package/dist/node_modules/recharts/es6/cartesian/getEquidistantTicks.js +0 -2
- package/dist/node_modules/recharts/es6/cartesian/getTicks.js +0 -2
- package/dist/node_modules/recharts/es6/chart/AccessibilityManager.js +0 -2
- package/dist/node_modules/recharts/es6/chart/AreaChart.js +0 -2
- package/dist/node_modules/recharts/es6/chart/BarChart.js +0 -2
- package/dist/node_modules/recharts/es6/chart/LineChart.js +0 -2
- package/dist/node_modules/recharts/es6/chart/Sankey.js +0 -2
- package/dist/node_modules/recharts/es6/chart/Treemap.js +0 -2
- package/dist/node_modules/recharts/es6/chart/generateCategoricalChart.js +0 -2
- package/dist/node_modules/recharts/es6/component/Cell.js +0 -2
- package/dist/node_modules/recharts/es6/component/Cursor.js +0 -2
- package/dist/node_modules/recharts/es6/component/DefaultLegendContent.js +0 -2
- package/dist/node_modules/recharts/es6/component/DefaultTooltipContent.js +0 -2
- package/dist/node_modules/recharts/es6/component/Label.js +0 -2
- package/dist/node_modules/recharts/es6/component/LabelList.js +0 -2
- package/dist/node_modules/recharts/es6/component/Legend.js +0 -2
- package/dist/node_modules/recharts/es6/component/ResponsiveContainer.js +0 -2
- package/dist/node_modules/recharts/es6/component/Text.js +0 -2
- package/dist/node_modules/recharts/es6/component/Tooltip.js +0 -2
- package/dist/node_modules/recharts/es6/component/TooltipBoundingBox.js +0 -2
- package/dist/node_modules/recharts/es6/container/Layer.js +0 -2
- package/dist/node_modules/recharts/es6/container/Surface.js +0 -2
- package/dist/node_modules/recharts/es6/context/chartLayoutContext.js +0 -2
- package/dist/node_modules/recharts/es6/shape/Cross.js +0 -2
- package/dist/node_modules/recharts/es6/shape/Curve.js +0 -2
- package/dist/node_modules/recharts/es6/shape/Dot.js +0 -2
- package/dist/node_modules/recharts/es6/shape/Polygon.js +0 -2
- package/dist/node_modules/recharts/es6/shape/Rectangle.js +0 -2
- package/dist/node_modules/recharts/es6/shape/Sector.js +0 -2
- package/dist/node_modules/recharts/es6/shape/Symbols.js +0 -2
- package/dist/node_modules/recharts/es6/shape/Trapezoid.js +0 -2
- package/dist/node_modules/recharts/es6/util/ActiveShapeUtils.js +0 -2
- package/dist/node_modules/recharts/es6/util/BarUtils.js +0 -2
- package/dist/node_modules/recharts/es6/util/CartesianUtils.js +0 -2
- package/dist/node_modules/recharts/es6/util/ChartUtils.js +0 -2
- package/dist/node_modules/recharts/es6/util/Constants.js +0 -2
- package/dist/node_modules/recharts/es6/util/CssPrefixUtils.js +0 -2
- package/dist/node_modules/recharts/es6/util/DOMUtils.js +0 -2
- package/dist/node_modules/recharts/es6/util/DataUtils.js +0 -2
- package/dist/node_modules/recharts/es6/util/DetectReferenceElementsDomain.js +0 -2
- package/dist/node_modules/recharts/es6/util/Events.js +0 -2
- package/dist/node_modules/recharts/es6/util/Global.js +0 -2
- package/dist/node_modules/recharts/es6/util/IfOverflowMatches.js +0 -2
- package/dist/node_modules/recharts/es6/util/LogUtils.js +0 -2
- package/dist/node_modules/recharts/es6/util/PolarUtils.js +0 -2
- package/dist/node_modules/recharts/es6/util/ReactUtils.js +0 -2
- package/dist/node_modules/recharts/es6/util/ReduceCSSCalc.js +0 -2
- package/dist/node_modules/recharts/es6/util/ShallowEqual.js +0 -2
- package/dist/node_modules/recharts/es6/util/TickUtils.js +0 -2
- package/dist/node_modules/recharts/es6/util/calculateViewBox.js +0 -2
- package/dist/node_modules/recharts/es6/util/cursor/getCursorPoints.js +0 -2
- package/dist/node_modules/recharts/es6/util/cursor/getCursorRectangle.js +0 -2
- package/dist/node_modules/recharts/es6/util/cursor/getRadialCursorPoints.js +0 -2
- package/dist/node_modules/recharts/es6/util/getEveryNthWithCondition.js +0 -2
- package/dist/node_modules/recharts/es6/util/getLegendProps.js +0 -2
- package/dist/node_modules/recharts/es6/util/isDomainSpecifiedByUser.js +0 -2
- package/dist/node_modules/recharts/es6/util/payload/getUniqPayload.js +0 -2
- package/dist/node_modules/recharts/es6/util/tooltip/translate.js +0 -2
- package/dist/node_modules/recharts/es6/util/types.js +0 -2
- package/dist/node_modules/recharts-scale/es6/getNiceTickValues.js +0 -2
- package/dist/node_modules/recharts-scale/es6/util/arithmetic.js +0 -2
- package/dist/node_modules/recharts-scale/es6/util/utils.js +0 -2
- package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js +0 -2
- package/dist/node_modules/tiny-invariant/dist/esm/tiny-invariant.js +0 -2
- package/dist/node_modules/victory-vendor/es/d3-scale.js +0 -2
- package/dist/node_modules/write-excel-file/modules/export/convertFileContentToUint8ArrayBrowser.js +0 -2
- package/dist/node_modules/write-excel-file/modules/export/convertFilesContentToUint8Arrays.js +0 -2
- package/dist/node_modules/write-excel-file/modules/export/downloadBlob.js +0 -2
- package/dist/node_modules/write-excel-file/modules/export/writeXlsxFileBrowser.js +0 -2
- package/dist/node_modules/write-excel-file/modules/export/writeXlsxFileUniversal.js +0 -2
- package/dist/node_modules/write-excel-file/modules/getSheetData/getSheetData.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xlsx/features/conditionalFormatting.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xlsx/features/images.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xlsx/features/stickyRowsOrColumns.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xlsx/files/_Content_Types_.xml.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xlsx/files/drawing.xml.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xlsx/files/drawing.xml.rels.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xlsx/files/rels.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xlsx/files/sharedStrings.xml.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/cell.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/column.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/columns.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/drawingReference.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/helpers/getCellStyleProperties.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/mergedCellsDescription.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/pageMargins.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/pageSetup.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/processMergedCells.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/row.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/sheet.xml.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/sheetData.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/sheetViews.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml.rels.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xlsx/files/styles.xml.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xlsx/files/workbook.xml.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xlsx/files/workbook.xml.rels.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xlsx/generateXlsxFileContents.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xlsx/getFeatures.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/convertDateToSerialNumber.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/features/getAdditionalContent.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/features/getElementXml.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/features/getWrittenFiles.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/features/transformContent.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getAlignmentXml.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getBorderXml.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getCellAddress.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getFileExtensionForContentType.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getFillXml.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getFontXml.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getOrderOfSiblings.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getXlsxColorForHexColor.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/hasAlignment.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/hasBorder.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/hasFill.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/hasFont.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/isCellObject.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/isObject.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/orderOfSiblings.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xlsx/initializeSharedStrings.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xlsx/initializeSheets.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xlsx/initializeStyles.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xlsx/validateSheetData.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xlsx/validateSheetName.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xml/appendMarkupInsideElement.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xml/applyEnclosingElementOffset.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xml/escapeXmlSpecialCharacters.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xml/findElement.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xml/findElementInsideElement.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xml/findElementsNonRecursive_.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xml/getAttributesString.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xml/getChildElements.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xml/getClosingTagMarkup.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xml/getMarkupInsideElement.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xml/getOpeningTagMarkup.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xml/getSelfClosingTagMarkup.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xml/insertElementMarkupAccordingToOrderOfSiblings.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xml/prependMarkupInsideElement.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xml/removeInvalidXmlCharacters.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xml/replaceElement.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xml/sanitizeAttributeName.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xml/sanitizeAttributeValue.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xml/sanitizeTextContent.js +0 -2
- package/dist/node_modules/write-excel-file/modules/xml/setMarkupInsideElement.js +0 -2
- package/dist/node_modules/write-excel-file/modules/zip/zipToArrayBuffer.js +0 -2
- package/dist/planmagnet/PlanMagnetRoot.js +0 -2
- package/dist/planmagnet/PlanMagnetRoutes.js +0 -2
- package/dist/planmagnet/activity/activityDescribe.js +0 -2
- package/dist/planmagnet/activity/relativeTime.js +0 -2
- package/dist/planmagnet/admin/PlanMagnetAdminRoot.js +0 -2
- package/dist/planmagnet/automation/AutomationExecutionsPanel.js +0 -2
- package/dist/planmagnet/automation/AutomationRuleFields.js +0 -2
- package/dist/planmagnet/automation/automationRuleTypes.js +0 -2
- package/dist/planmagnet/board/BoardViewBar.js +0 -2
- package/dist/planmagnet/board/BulkActions.js +0 -2
- package/dist/planmagnet/board/ProjectBoard.js +0 -2
- package/dist/planmagnet/board/boardViewConfig.js +0 -2
- package/dist/planmagnet/budgets/BudgetControls.js +0 -2
- package/dist/planmagnet/budgets/ExpenseControls.js +0 -2
- package/dist/planmagnet/budgets/ProjectBudgetsSummary.js +0 -2
- package/dist/planmagnet/budgets/budgetMath.js +0 -2
- package/dist/planmagnet/comments/CommentAttachmentUpload.js +0 -2
- package/dist/planmagnet/comments/CommentAttachments.js +0 -2
- package/dist/planmagnet/comments/CommentBody.js +0 -2
- package/dist/planmagnet/comments/CommentThread.js +0 -2
- package/dist/planmagnet/comments/MentionComposer.js +0 -2
- package/dist/planmagnet/comments/RoadmapComments.js +0 -2
- package/dist/planmagnet/comments/TargetComments.js +0 -2
- package/dist/planmagnet/comments/WorkItemActivity.js +0 -2
- package/dist/planmagnet/comments/WorkItemComments.js +0 -2
- package/dist/planmagnet/comments/commentAttachmentUploadClient.js +0 -2
- package/dist/planmagnet/comments/commentImageTokens.js +0 -2
- package/dist/planmagnet/comments/commentTokens.js +0 -2
- package/dist/planmagnet/comments/fileDisplay.js +0 -2
- package/dist/planmagnet/comments/useCommentFileUrl.js +0 -2
- package/dist/planmagnet/controls/AutomationRuleControls.js +0 -2
- package/dist/planmagnet/controls/CompetitorControls.js +0 -2
- package/dist/planmagnet/controls/ConfirmButton.js +0 -2
- package/dist/planmagnet/controls/CustomFieldControls.js +0 -2
- package/dist/planmagnet/controls/CustomFieldValuesPanel.js +0 -2
- package/dist/planmagnet/controls/FeatureControls.js +0 -2
- package/dist/planmagnet/controls/FeatureTriage.js +0 -2
- package/dist/planmagnet/controls/FeedbackControls.js +0 -2
- package/dist/planmagnet/controls/LiveStatus.js +0 -2
- package/dist/planmagnet/controls/MilestoneControls.js +0 -2
- package/dist/planmagnet/controls/ObjectiveControls.js +0 -2
- package/dist/planmagnet/controls/Pickers.js +0 -2
- package/dist/planmagnet/controls/PortfolioControls.js +0 -2
- package/dist/planmagnet/controls/PrioritizationControls.js +0 -2
- package/dist/planmagnet/controls/ProgramControls.js +0 -2
- package/dist/planmagnet/controls/ProjectControls.js +0 -2
- package/dist/planmagnet/controls/QualityGateControls.js +0 -2
- package/dist/planmagnet/controls/ReleaseControls.js +0 -2
- package/dist/planmagnet/controls/RiskControls.js +0 -2
- package/dist/planmagnet/controls/SyncControls.js +0 -2
- package/dist/planmagnet/controls/TemplateControls.js +0 -2
- package/dist/planmagnet/controls/WebhookSubscriptionControls.js +0 -2
- package/dist/planmagnet/controls/WorkItemControls.js +0 -2
- package/dist/planmagnet/create/CreateDialogs.js +0 -2
- package/dist/planmagnet/dashboards/DashboardUI.js +0 -2
- package/dist/planmagnet/dashboards/cards/DeliveryTimelineCard.js +0 -2
- package/dist/planmagnet/dashboards/cards/ObjectivesProgressCard.js +0 -2
- package/dist/planmagnet/dashboards/cards/PortfolioHealthCard.js +0 -2
- package/dist/planmagnet/dashboards/cards/QualityMetricsCard.js +0 -2
- package/dist/planmagnet/dashboards/cards/RiskSeverityCard.js +0 -2
- package/dist/planmagnet/dashboards/cards/RoadmapHorizonCard.js +0 -2
- package/dist/planmagnet/dashboards/cards/SprintCapacityCard.js +0 -2
- package/dist/planmagnet/dashboards/cards/TaskCompletionCard.js +0 -2
- package/dist/planmagnet/dashboards/cards/TeamCapacityCard.js +0 -2
- package/dist/planmagnet/dashboards/cards/TeamOverviewCard.js +0 -2
- package/dist/planmagnet/dashboards/cards/TeamWorkloadCard.js +0 -2
- package/dist/planmagnet/dashboards/cards/TimeLoggedCard.js +0 -2
- package/dist/planmagnet/dependency/DependencyGraph.js +0 -2
- package/dist/planmagnet/dependency/DependencyPanel.js +0 -2
- package/dist/planmagnet/dependency/GanttChart.js +0 -2
- package/dist/planmagnet/dependency/useProjectWorkItemsGraph.js +0 -2
- package/dist/planmagnet/discussion/WorkItemDiscussionPanel.js +0 -2
- package/dist/planmagnet/docs/DocDiffView.js +0 -2
- package/dist/planmagnet/docs/DocStatusBadge.js +0 -2
- package/dist/planmagnet/docs/DocSuggestionsPanel.js +0 -2
- package/dist/planmagnet/docs/DocVersionCompare.js +0 -2
- package/dist/planmagnet/export/ExportWorkItemsButton.js +0 -2
- package/dist/planmagnet/export/workItemsCsv.js +0 -2
- package/dist/planmagnet/forecast/DeliveryForecastCard.js +0 -2
- package/dist/planmagnet/forecast/ProjectOutlookCard.js +0 -2
- package/dist/planmagnet/forecast/ProjectRiskSummaryCard.js +0 -2
- package/dist/planmagnet/forecast/ResourceForecastCard.js +0 -2
- package/dist/planmagnet/forecast/riskFlags.js +0 -2
- package/dist/planmagnet/hooks/useCounts.js +0 -2
- package/dist/planmagnet/hooks/useEntityId.js +0 -2
- package/dist/planmagnet/hooks/useLiveRefresh.js +0 -2
- package/dist/planmagnet/hooks/usePresence.js +0 -2
- package/dist/planmagnet/hooks/useProjectWorkflow.js +0 -2
- package/dist/planmagnet/import/exportColumns.js +0 -2
- package/dist/planmagnet/integrations/routes.js +0 -2
- package/dist/planmagnet/integrations/syncTypes.js +0 -2
- package/dist/planmagnet/integrations/useSyncProviderCapabilities.js +0 -2
- package/dist/planmagnet/links/CodeLinksPanel.js +0 -2
- package/dist/planmagnet/links/IssueLinksPanel.js +0 -2
- package/dist/planmagnet/meetings/MeetingActionItemsPanel.js +0 -2
- package/dist/planmagnet/meetings/MeetingsCard.js +0 -2
- package/dist/planmagnet/meetings/ScheduleCeremoniesDialog.js +0 -2
- package/dist/planmagnet/meetings/ScheduleMeetingDialog.js +0 -2
- package/dist/planmagnet/meetings/UnlinkMeetingDialog.js +0 -2
- package/dist/planmagnet/meetings/meetingActions.js +0 -2
- package/dist/planmagnet/meetings/meetingGraphql.js +0 -2
- package/dist/planmagnet/meetings/meetingModel.js +0 -2
- package/dist/planmagnet/milestones/MilestoneControls.js +0 -2
- package/dist/planmagnet/pages/ActivityActivityPagePage.js +0 -2
- package/dist/planmagnet/pages/AiActivityPagePage.js +0 -2
- package/dist/planmagnet/pages/AiPlanPagePage.js +0 -2
- package/dist/planmagnet/pages/AnalyticsAnalyticsPagePage.js +0 -2
- package/dist/planmagnet/pages/AutomationAutomationRuleDetailPagePage.js +0 -2
- package/dist/planmagnet/pages/AutomationAutomationRulesPagePage.js +0 -2
- package/dist/planmagnet/pages/AutomationCreateAutomationRulePagePage.js +0 -2
- package/dist/planmagnet/pages/CompetitorsCompetitorDetailPagePage.js +0 -2
- package/dist/planmagnet/pages/CompetitorsCompetitorsPagePage.js +0 -2
- package/dist/planmagnet/pages/CompetitorsCreateCompetitorPagePage.js +0 -2
- package/dist/planmagnet/pages/CompetitorsEditCompetitorPagePage.js +0 -2
- package/dist/planmagnet/pages/DashboardDashboardPagePage.js +0 -2
- package/dist/planmagnet/pages/DashboardsExecutivePagePage.js +0 -2
- package/dist/planmagnet/pages/DashboardsLeadershipPagePage.js +0 -2
- package/dist/planmagnet/pages/DashboardsProjectManagerPagePage.js +0 -2
- package/dist/planmagnet/pages/DashboardsTeamUtilizationPagePage.js +0 -2
- package/dist/planmagnet/pages/DocsDocDetailPagePage.js +0 -2
- package/dist/planmagnet/pages/DocsDocsPagePage.js +0 -2
- package/dist/planmagnet/pages/GoalsCreateObjectivePagePage.js +0 -2
- package/dist/planmagnet/pages/GoalsGoalsPagePage.js +0 -2
- package/dist/planmagnet/pages/GoalsObjectiveDetailPagePage.js +0 -2
- package/dist/planmagnet/pages/IntegrationsNewSyncPagePage.js +0 -2
- package/dist/planmagnet/pages/IntegrationsSyncDetailPagePage.js +0 -2
- package/dist/planmagnet/pages/IntegrationsSyncsPagePage.js +0 -2
- package/dist/planmagnet/pages/IntegrationsWebhooksPagePage.js +0 -2
- package/dist/planmagnet/pages/MeetingsMeetingDetailPagePage.js +0 -2
- package/dist/planmagnet/pages/MeetingsMeetingsPagePage.js +0 -2
- package/dist/planmagnet/pages/NotFoundPage.js +0 -2
- package/dist/planmagnet/pages/PortfoliosCreatePortfolioPagePage.js +0 -2
- package/dist/planmagnet/pages/PortfoliosEditPortfolioPagePage.js +0 -2
- package/dist/planmagnet/pages/PortfoliosPortfolioDetailPagePage.js +0 -2
- package/dist/planmagnet/pages/PortfoliosPortfoliosPagePage.js +0 -2
- package/dist/planmagnet/pages/ProductsCreateProductPagePage.js +0 -2
- package/dist/planmagnet/pages/ProductsCreateRoadmapPagePage.js +0 -2
- package/dist/planmagnet/pages/ProductsCustomerSatisfactionPagePage.js +0 -2
- package/dist/planmagnet/pages/ProductsEditProductPagePage.js +0 -2
- package/dist/planmagnet/pages/ProductsEditReleasePagePage.js +0 -2
- package/dist/planmagnet/pages/ProductsEditRoadmapPagePage.js +0 -2
- package/dist/planmagnet/pages/ProductsFeatureAnalyticsPagePage.js +0 -2
- package/dist/planmagnet/pages/ProductsFeatureDetailPagePage.js +0 -2
- package/dist/planmagnet/pages/ProductsFeaturesPagePage.js +0 -2
- package/dist/planmagnet/pages/ProductsNewFeaturePagePage.js +0 -2
- package/dist/planmagnet/pages/ProductsPrioritizationPagePage.js +0 -2
- package/dist/planmagnet/pages/ProductsProductDetailPagePage.js +0 -2
- package/dist/planmagnet/pages/ProductsProductFeatureDetailPagePage.js +0 -2
- package/dist/planmagnet/pages/ProductsProductHierarchyPagePage.js +0 -2
- package/dist/planmagnet/pages/ProductsProductLinesPagePage.js +0 -2
- package/dist/planmagnet/pages/ProductsProductsPagePage.js +0 -2
- package/dist/planmagnet/pages/ProductsReleaseDetailPagePage.js +0 -2
- package/dist/planmagnet/pages/ProductsReleasesPagePage.js +0 -2
- package/dist/planmagnet/pages/ProductsRoadmapAnalyticsPagePage.js +0 -2
- package/dist/planmagnet/pages/ProductsRoadmapDetailPagePage.js +0 -2
- package/dist/planmagnet/pages/ProductsRoadmapsPagePage.js +0 -2
- package/dist/planmagnet/pages/ProgramsCreateProgramPagePage.js +0 -2
- package/dist/planmagnet/pages/ProgramsEditProgramPagePage.js +0 -2
- package/dist/planmagnet/pages/ProgramsProgramDetailPagePage.js +0 -2
- package/dist/planmagnet/pages/ProgramsProgramsPagePage.js +0 -2
- package/dist/planmagnet/pages/ProjectsActiveProjectsPagePage.js +0 -2
- package/dist/planmagnet/pages/ProjectsAtRiskPagePage.js +0 -2
- package/dist/planmagnet/pages/ProjectsBudgetDetailPagePage.js +0 -2
- package/dist/planmagnet/pages/ProjectsBudgetsPagePage.js +0 -2
- package/dist/planmagnet/pages/ProjectsCreateProjectPagePage.js +0 -2
- package/dist/planmagnet/pages/ProjectsCriticalPathPagePage.js +0 -2
- package/dist/planmagnet/pages/ProjectsCustomFieldsPagePage.js +0 -2
- package/dist/planmagnet/pages/ProjectsEditProjectPagePage.js +0 -2
- package/dist/planmagnet/pages/ProjectsGanttPagePage.js +0 -2
- package/dist/planmagnet/pages/ProjectsMilestoneDetailPagePage.js +0 -2
- package/dist/planmagnet/pages/ProjectsMilestonesPagePage.js +0 -2
- package/dist/planmagnet/pages/ProjectsPlanningDetailPagePage.js +0 -2
- package/dist/planmagnet/pages/ProjectsPlanningEditPagePage.js +0 -2
- package/dist/planmagnet/pages/ProjectsPlanningPagePage.js +0 -2
- package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.js +0 -2
- package/dist/planmagnet/pages/ProjectsProjectsPagePage.js +0 -2
- package/dist/planmagnet/pages/ProjectsQualityGatesPagePage.js +0 -2
- package/dist/planmagnet/pages/ProjectsWorkflowPagePage.js +0 -2
- package/dist/planmagnet/pages/ReportsCreateReportPagePage.js +0 -2
- package/dist/planmagnet/pages/ReportsEditReportPagePage.js +0 -2
- package/dist/planmagnet/pages/ReportsReportPagePage.js +0 -2
- package/dist/planmagnet/pages/ReportsReportsPagePage.js +0 -2
- package/dist/planmagnet/pages/RisksRiskDetailPagePage.js +0 -2
- package/dist/planmagnet/pages/RisksRiskRegisterPagePage.js +0 -2
- package/dist/planmagnet/pages/SprintsStartSprintPagePage.js +0 -2
- package/dist/planmagnet/pages/TasksCreateTaskPagePage.js +0 -2
- package/dist/planmagnet/pages/TasksEditTaskPagePage.js +0 -2
- package/dist/planmagnet/pages/TasksImportPagePage.js +0 -2
- package/dist/planmagnet/pages/TasksMyDashboardPagePage.js +0 -2
- package/dist/planmagnet/pages/TasksMyWorkPagePage.js +0 -2
- package/dist/planmagnet/pages/TasksTaskDetailPagePage.js +0 -2
- package/dist/planmagnet/pages/TasksTasksPagePage.js +0 -2
- package/dist/planmagnet/pages/TasksTimeEntriesPagePage.js +0 -2
- package/dist/planmagnet/pages/TasksTimesheetDetailPagePage.js +0 -2
- package/dist/planmagnet/pages/TasksTimesheetsPagePage.js +0 -2
- package/dist/planmagnet/pages/TeamCreateTeamPagePage.js +0 -2
- package/dist/planmagnet/pages/TeamInviteMemberPagePage.js +99 -101
- package/dist/planmagnet/pages/TeamTeamDetailPagePage.js +0 -2
- package/dist/planmagnet/pages/TeamTeamEditPagePage.js +0 -2
- package/dist/planmagnet/pages/TeamTeamPagePage.js +0 -2
- package/dist/planmagnet/pages/TeamTeamsListPagePage.js +0 -2
- package/dist/planmagnet/pages/TemplatesEditTemplatePagePage.js +0 -2
- package/dist/planmagnet/pages/TemplatesTemplatesPagePage.js +0 -2
- package/dist/planmagnet/pages/WorkspaceCreateWorkspacePagePage.js +0 -2
- package/dist/planmagnet/pages/analytics/DeliveryHealthCards.js +0 -2
- package/dist/planmagnet/pages/analytics/DeliveryKpisCard.js +0 -2
- package/dist/planmagnet/pages/analytics/MetricsCard.js +0 -2
- package/dist/planmagnet/pages/analytics/QualityMetricsCard.js +0 -2
- package/dist/planmagnet/pages/analytics/SprintDeliveryCards.js +0 -2
- package/dist/planmagnet/pages/analytics/StatusFlowCard.js +0 -2
- package/dist/planmagnet/pages/analytics/ThroughputCard.js +0 -2
- package/dist/planmagnet/pages/analytics/WorkBreakdownCard.js +0 -2
- package/dist/planmagnet/pages/analytics/analyticsRange.js +0 -2
- package/dist/planmagnet/people/People.js +0 -2
- package/dist/planmagnet/presence/PresenceAvatars.js +0 -2
- package/dist/planmagnet/product/FeatureLinkPanels.js +0 -2
- package/dist/planmagnet/product/ProductControls.js +0 -2
- package/dist/planmagnet/product/ProductFeatureControls.js +0 -2
- package/dist/planmagnet/product/ProductFeatureLinkCard.js +0 -2
- package/dist/planmagnet/product/ProductLineControls.js +0 -2
- package/dist/planmagnet/product/ProductTeamsPanel.js +0 -2
- package/dist/planmagnet/product/WorkItemProductFeatureChip.js +0 -2
- package/dist/planmagnet/product/hierarchy.js +0 -2
- package/dist/planmagnet/product/hierarchyOperations.js +0 -2
- package/dist/planmagnet/product/refusal.js +0 -2
- package/dist/planmagnet/product/routes.js +0 -2
- package/dist/planmagnet/providers/PlanMagnetProvider.js +0 -2
- package/dist/planmagnet/releases/ReleaseChecklistCard.js +0 -2
- package/dist/planmagnet/releases/ReleaseGatesCard.js +0 -2
- package/dist/planmagnet/releases/ReleaseNotesCard.js +0 -2
- package/dist/planmagnet/releases/ReleaseReadinessCard.js +0 -2
- package/dist/planmagnet/releases/ReleaseWorkItemsCard.js +0 -2
- package/dist/planmagnet/releases/useReleaseOptions.js +0 -2
- package/dist/planmagnet/reports/ExportMenu.js +0 -2
- package/dist/planmagnet/reports/PrintReportView.js +0 -2
- package/dist/planmagnet/reports/ReportBuilderCanvas.js +0 -2
- package/dist/planmagnet/reports/ReportBuilderPage.js +0 -2
- package/dist/planmagnet/reports/ReportRunHistory.js +0 -2
- package/dist/planmagnet/reports/ReportWidgetRenderer.js +0 -2
- package/dist/planmagnet/reports/SchedulesPanel.js +0 -2
- package/dist/planmagnet/reports/ShareDialog.js +0 -2
- package/dist/planmagnet/reports/SharedReportPage.js +0 -2
- package/dist/planmagnet/reports/WidgetEditorDialog.js +0 -2
- package/dist/planmagnet/reports/reportExportPptx.js +0 -2
- package/dist/planmagnet/reports/reportExportXlsx.js +0 -2
- package/dist/planmagnet/reports/reportGraphql.js +0 -2
- package/dist/planmagnet/reports/reportModel.js +0 -2
- package/dist/planmagnet/reports/sharedReportRoute.js +0 -2
- package/dist/planmagnet/roadmaps/FeatureInitiativeCard.js +0 -2
- package/dist/planmagnet/roadmaps/RoadmapControls.js +0 -2
- package/dist/planmagnet/roadmaps/RoadmapNowNextLater.js +0 -2
- package/dist/planmagnet/roadmaps/RoadmapPresentation.js +0 -2
- package/dist/planmagnet/roadmaps/RoadmapReviewPanel.js +0 -2
- package/dist/planmagnet/roadmaps/RoadmapVersionsPanel.js +0 -2
- package/dist/planmagnet/roadmaps/planningFocus.js +0 -2
- package/dist/planmagnet/satisfaction/DeliverySatisfactionSection.js +0 -2
- package/dist/planmagnet/satisfaction/SatisfactionFigures.js +0 -2
- package/dist/planmagnet/satisfaction/SatisfactionImportDialog.js +0 -2
- package/dist/planmagnet/satisfaction/SatisfactionLinkFields.js +0 -2
- package/dist/planmagnet/satisfaction/SatisfactionReleaseSelect.js +0 -2
- package/dist/planmagnet/satisfaction/SatisfactionResponseDialog.js +0 -2
- package/dist/planmagnet/satisfaction/SatisfactionResponsesTable.js +0 -2
- package/dist/planmagnet/satisfaction/SatisfactionSummaryCard.js +0 -2
- package/dist/planmagnet/satisfaction/SatisfactionWindowPicker.js +0 -2
- package/dist/planmagnet/satisfaction/satisfaction.js +0 -2
- package/dist/planmagnet/satisfaction/satisfactionCsv.js +0 -2
- package/dist/planmagnet/satisfaction/satisfactionForm.js +0 -2
- package/dist/planmagnet/satisfaction/satisfactionOperations.js +0 -2
- package/dist/planmagnet/satisfaction/useSatisfactionAccess.js +0 -2
- package/dist/planmagnet/skills/RequiredSkillsEditor.js +0 -2
- package/dist/planmagnet/skills/SkillChips.js +0 -2
- package/dist/planmagnet/skills/SkillCoverageCard.js +0 -2
- package/dist/planmagnet/skills/WorkItemRequiredSkills.js +0 -2
- package/dist/planmagnet/skills/skillOperations.js +0 -2
- package/dist/planmagnet/skills/skillTags.js +0 -2
- package/dist/planmagnet/skills/useRequiredSkillsDraft.js +0 -2
- package/dist/planmagnet/sprints/SprintControls.js +0 -2
- package/dist/planmagnet/sprints/SprintDates.js +0 -2
- package/dist/planmagnet/store/planmagnetStore.js +0 -2
- package/dist/planmagnet/team/PendingInvitations.d.ts +1 -3
- package/dist/planmagnet/team/PendingInvitations.js +62 -65
- package/dist/planmagnet/team/TeamControls.js +0 -2
- package/dist/planmagnet/team/UnmatchedCrewIdentities.js +0 -2
- package/dist/planmagnet/team/invitationEmail.js +0 -2
- package/dist/planmagnet/time/TaskTimePanel.js +0 -2
- package/dist/planmagnet/time/TimeEntryControls.js +0 -2
- package/dist/planmagnet/time/TimesheetControls.js +0 -2
- package/dist/planmagnet/time/timeShared.js +0 -2
- package/dist/planmagnet/utils/cn.js +0 -2
- package/dist/planmagnet/utils/email.js +0 -2
- package/dist/planmagnet/utils/formValidation.js +0 -2
- package/dist/planmagnet/utils/graphqlErrors.js +0 -2
- package/dist/planmagnet/utils/lineDiff.js +0 -2
- package/dist/planmagnet/utils/mutationResult.js +0 -2
- package/dist/planmagnet/utils/navigation.js +0 -2
- package/dist/planmagnet/utils/qualityGateCriteria.js +0 -2
- package/dist/planmagnet/utils/rowNavigation.js +0 -2
- package/dist/planmagnet/utils/statusColor.js +0 -2
- package/dist/planmagnet/utils/urlParam.js +0 -2
- package/dist/planmagnet/webhooks/webhookTypes.js +0 -2
- package/dist/shared/hooks/useTr.js +0 -2
- package/dist/shared/utils/i18n.js +0 -2
- package/package.json +2 -1
- package/dist/_virtual/__vite-browser-external.js.map +0 -1
- package/dist/components/Button.d.ts.map +0 -1
- package/dist/components/Button.stories.d.ts.map +0 -1
- package/dist/components/MarkdownEditor.d.ts.map +0 -1
- package/dist/components/MarkdownEditor.js.map +0 -1
- package/dist/dev/main.d.ts.map +0 -1
- package/dist/generated/global-operations.d.ts.map +0 -1
- package/dist/generated/global-types.d.ts.map +0 -1
- package/dist/generated/wspace-operations.d.ts.map +0 -1
- package/dist/generated/wspace-types.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/node_modules/@apollo/client/errors/CombinedGraphQLErrors.js.map +0 -1
- package/dist/node_modules/@apollo/client/errors/ServerError.js.map +0 -1
- package/dist/node_modules/@apollo/client/errors/utils.js.map +0 -1
- package/dist/node_modules/clsx/dist/clsx.js.map +0 -1
- package/dist/node_modules/d3-array/src/ascending.js.map +0 -1
- package/dist/node_modules/d3-array/src/bisect.js.map +0 -1
- package/dist/node_modules/d3-array/src/bisector.js.map +0 -1
- package/dist/node_modules/d3-array/src/descending.js.map +0 -1
- package/dist/node_modules/d3-array/src/max.js.map +0 -1
- package/dist/node_modules/d3-array/src/min.js.map +0 -1
- package/dist/node_modules/d3-array/src/number.js.map +0 -1
- package/dist/node_modules/d3-array/src/quantile.js.map +0 -1
- package/dist/node_modules/d3-array/src/quickselect.js.map +0 -1
- package/dist/node_modules/d3-array/src/range.js.map +0 -1
- package/dist/node_modules/d3-array/src/sort.js.map +0 -1
- package/dist/node_modules/d3-array/src/ticks.js.map +0 -1
- package/dist/node_modules/d3-color/src/color.js.map +0 -1
- package/dist/node_modules/d3-color/src/define.js.map +0 -1
- package/dist/node_modules/d3-format/src/defaultLocale.js.map +0 -1
- package/dist/node_modules/d3-format/src/exponent.js.map +0 -1
- package/dist/node_modules/d3-format/src/formatDecimal.js.map +0 -1
- package/dist/node_modules/d3-format/src/formatGroup.js.map +0 -1
- package/dist/node_modules/d3-format/src/formatNumerals.js.map +0 -1
- package/dist/node_modules/d3-format/src/formatPrefixAuto.js.map +0 -1
- package/dist/node_modules/d3-format/src/formatRounded.js.map +0 -1
- package/dist/node_modules/d3-format/src/formatSpecifier.js.map +0 -1
- package/dist/node_modules/d3-format/src/formatTrim.js.map +0 -1
- package/dist/node_modules/d3-format/src/formatTypes.js.map +0 -1
- package/dist/node_modules/d3-format/src/identity.js.map +0 -1
- package/dist/node_modules/d3-format/src/locale.js.map +0 -1
- package/dist/node_modules/d3-format/src/precisionFixed.js.map +0 -1
- package/dist/node_modules/d3-format/src/precisionPrefix.js.map +0 -1
- package/dist/node_modules/d3-format/src/precisionRound.js.map +0 -1
- package/dist/node_modules/d3-interpolate/src/array.js.map +0 -1
- package/dist/node_modules/d3-interpolate/src/basis.js.map +0 -1
- package/dist/node_modules/d3-interpolate/src/basisClosed.js.map +0 -1
- package/dist/node_modules/d3-interpolate/src/color.js.map +0 -1
- package/dist/node_modules/d3-interpolate/src/constant.js.map +0 -1
- package/dist/node_modules/d3-interpolate/src/date.js.map +0 -1
- package/dist/node_modules/d3-interpolate/src/number.js.map +0 -1
- package/dist/node_modules/d3-interpolate/src/numberArray.js.map +0 -1
- package/dist/node_modules/d3-interpolate/src/object.js.map +0 -1
- package/dist/node_modules/d3-interpolate/src/piecewise.js.map +0 -1
- package/dist/node_modules/d3-interpolate/src/rgb.js.map +0 -1
- package/dist/node_modules/d3-interpolate/src/round.js.map +0 -1
- package/dist/node_modules/d3-interpolate/src/string.js.map +0 -1
- package/dist/node_modules/d3-interpolate/src/value.js.map +0 -1
- package/dist/node_modules/d3-path/src/path.js.map +0 -1
- package/dist/node_modules/d3-scale/src/band.js.map +0 -1
- package/dist/node_modules/d3-scale/src/constant.js.map +0 -1
- package/dist/node_modules/d3-scale/src/continuous.js.map +0 -1
- package/dist/node_modules/d3-scale/src/diverging.js.map +0 -1
- package/dist/node_modules/d3-scale/src/identity.js.map +0 -1
- package/dist/node_modules/d3-scale/src/init.js.map +0 -1
- package/dist/node_modules/d3-scale/src/linear.js.map +0 -1
- package/dist/node_modules/d3-scale/src/log.js.map +0 -1
- package/dist/node_modules/d3-scale/src/nice.js.map +0 -1
- package/dist/node_modules/d3-scale/src/number.js.map +0 -1
- package/dist/node_modules/d3-scale/src/ordinal.js.map +0 -1
- package/dist/node_modules/d3-scale/src/pow.js.map +0 -1
- package/dist/node_modules/d3-scale/src/quantile.js.map +0 -1
- package/dist/node_modules/d3-scale/src/quantize.js.map +0 -1
- package/dist/node_modules/d3-scale/src/radial.js.map +0 -1
- package/dist/node_modules/d3-scale/src/sequential.js.map +0 -1
- package/dist/node_modules/d3-scale/src/sequentialQuantile.js.map +0 -1
- package/dist/node_modules/d3-scale/src/symlog.js.map +0 -1
- package/dist/node_modules/d3-scale/src/threshold.js.map +0 -1
- package/dist/node_modules/d3-scale/src/tickFormat.js.map +0 -1
- package/dist/node_modules/d3-scale/src/time.js.map +0 -1
- package/dist/node_modules/d3-scale/src/utcTime.js.map +0 -1
- package/dist/node_modules/d3-shape/src/area.js.map +0 -1
- package/dist/node_modules/d3-shape/src/array.js.map +0 -1
- package/dist/node_modules/d3-shape/src/constant.js.map +0 -1
- package/dist/node_modules/d3-shape/src/curve/basis.js.map +0 -1
- package/dist/node_modules/d3-shape/src/curve/basisClosed.js.map +0 -1
- package/dist/node_modules/d3-shape/src/curve/basisOpen.js.map +0 -1
- package/dist/node_modules/d3-shape/src/curve/bump.js.map +0 -1
- package/dist/node_modules/d3-shape/src/curve/linear.js.map +0 -1
- package/dist/node_modules/d3-shape/src/curve/linearClosed.js.map +0 -1
- package/dist/node_modules/d3-shape/src/curve/monotone.js.map +0 -1
- package/dist/node_modules/d3-shape/src/curve/natural.js.map +0 -1
- package/dist/node_modules/d3-shape/src/curve/step.js.map +0 -1
- package/dist/node_modules/d3-shape/src/line.js.map +0 -1
- package/dist/node_modules/d3-shape/src/math.js.map +0 -1
- package/dist/node_modules/d3-shape/src/noop.js.map +0 -1
- package/dist/node_modules/d3-shape/src/offset/expand.js.map +0 -1
- package/dist/node_modules/d3-shape/src/offset/none.js.map +0 -1
- package/dist/node_modules/d3-shape/src/offset/silhouette.js.map +0 -1
- package/dist/node_modules/d3-shape/src/offset/wiggle.js.map +0 -1
- package/dist/node_modules/d3-shape/src/order/none.js.map +0 -1
- package/dist/node_modules/d3-shape/src/path.js.map +0 -1
- package/dist/node_modules/d3-shape/src/point.js.map +0 -1
- package/dist/node_modules/d3-shape/src/stack.js.map +0 -1
- package/dist/node_modules/d3-shape/src/symbol/circle.js.map +0 -1
- package/dist/node_modules/d3-shape/src/symbol/cross.js.map +0 -1
- package/dist/node_modules/d3-shape/src/symbol/diamond.js.map +0 -1
- package/dist/node_modules/d3-shape/src/symbol/square.js.map +0 -1
- package/dist/node_modules/d3-shape/src/symbol/star.js.map +0 -1
- package/dist/node_modules/d3-shape/src/symbol/triangle.js.map +0 -1
- package/dist/node_modules/d3-shape/src/symbol/wye.js.map +0 -1
- package/dist/node_modules/d3-shape/src/symbol.js.map +0 -1
- package/dist/node_modules/d3-time/src/day.js.map +0 -1
- package/dist/node_modules/d3-time/src/duration.js.map +0 -1
- package/dist/node_modules/d3-time/src/hour.js.map +0 -1
- package/dist/node_modules/d3-time/src/interval.js.map +0 -1
- package/dist/node_modules/d3-time/src/millisecond.js.map +0 -1
- package/dist/node_modules/d3-time/src/minute.js.map +0 -1
- package/dist/node_modules/d3-time/src/month.js.map +0 -1
- package/dist/node_modules/d3-time/src/second.js.map +0 -1
- package/dist/node_modules/d3-time/src/ticks.js.map +0 -1
- package/dist/node_modules/d3-time/src/week.js.map +0 -1
- package/dist/node_modules/d3-time/src/year.js.map +0 -1
- package/dist/node_modules/d3-time-format/src/defaultLocale.js.map +0 -1
- package/dist/node_modules/d3-time-format/src/locale.js.map +0 -1
- package/dist/node_modules/decimal.js-light/decimal.js.map +0 -1
- package/dist/node_modules/eventemitter3/index.js.map +0 -1
- package/dist/node_modules/fast-equals/dist/es/index.js.map +0 -1
- package/dist/node_modules/fflate/esm/browser.js.map +0 -1
- package/dist/node_modules/internmap/src/index.js.map +0 -1
- package/dist/node_modules/jszip/dist/jszip.min.js.map +0 -1
- package/dist/node_modules/lodash/_DataView.js.map +0 -1
- package/dist/node_modules/lodash/_Hash.js.map +0 -1
- package/dist/node_modules/lodash/_ListCache.js.map +0 -1
- package/dist/node_modules/lodash/_Map.js.map +0 -1
- package/dist/node_modules/lodash/_MapCache.js.map +0 -1
- package/dist/node_modules/lodash/_Promise.js.map +0 -1
- package/dist/node_modules/lodash/_Set.js.map +0 -1
- package/dist/node_modules/lodash/_SetCache.js.map +0 -1
- package/dist/node_modules/lodash/_Stack.js.map +0 -1
- package/dist/node_modules/lodash/_Symbol.js.map +0 -1
- package/dist/node_modules/lodash/_Uint8Array.js.map +0 -1
- package/dist/node_modules/lodash/_WeakMap.js.map +0 -1
- package/dist/node_modules/lodash/_apply.js.map +0 -1
- package/dist/node_modules/lodash/_arrayEach.js.map +0 -1
- package/dist/node_modules/lodash/_arrayEvery.js.map +0 -1
- package/dist/node_modules/lodash/_arrayFilter.js.map +0 -1
- package/dist/node_modules/lodash/_arrayIncludes.js.map +0 -1
- package/dist/node_modules/lodash/_arrayIncludesWith.js.map +0 -1
- package/dist/node_modules/lodash/_arrayLikeKeys.js.map +0 -1
- package/dist/node_modules/lodash/_arrayMap.js.map +0 -1
- package/dist/node_modules/lodash/_arrayPush.js.map +0 -1
- package/dist/node_modules/lodash/_arraySome.js.map +0 -1
- package/dist/node_modules/lodash/_asciiToArray.js.map +0 -1
- package/dist/node_modules/lodash/_assignValue.js.map +0 -1
- package/dist/node_modules/lodash/_assocIndexOf.js.map +0 -1
- package/dist/node_modules/lodash/_baseAssign.js.map +0 -1
- package/dist/node_modules/lodash/_baseAssignIn.js.map +0 -1
- package/dist/node_modules/lodash/_baseAssignValue.js.map +0 -1
- package/dist/node_modules/lodash/_baseClone.js.map +0 -1
- package/dist/node_modules/lodash/_baseCreate.js.map +0 -1
- package/dist/node_modules/lodash/_baseEach.js.map +0 -1
- package/dist/node_modules/lodash/_baseEvery.js.map +0 -1
- package/dist/node_modules/lodash/_baseExtremum.js.map +0 -1
- package/dist/node_modules/lodash/_baseFindIndex.js.map +0 -1
- package/dist/node_modules/lodash/_baseFlatten.js.map +0 -1
- package/dist/node_modules/lodash/_baseFor.js.map +0 -1
- package/dist/node_modules/lodash/_baseForOwn.js.map +0 -1
- package/dist/node_modules/lodash/_baseGet.js.map +0 -1
- package/dist/node_modules/lodash/_baseGetAllKeys.js.map +0 -1
- package/dist/node_modules/lodash/_baseGetTag.js.map +0 -1
- package/dist/node_modules/lodash/_baseGt.js.map +0 -1
- package/dist/node_modules/lodash/_baseHasIn.js.map +0 -1
- package/dist/node_modules/lodash/_baseIndexOf.js.map +0 -1
- package/dist/node_modules/lodash/_baseIsArguments.js.map +0 -1
- package/dist/node_modules/lodash/_baseIsEqual.js.map +0 -1
- package/dist/node_modules/lodash/_baseIsEqualDeep.js.map +0 -1
- package/dist/node_modules/lodash/_baseIsMap.js.map +0 -1
- package/dist/node_modules/lodash/_baseIsMatch.js.map +0 -1
- package/dist/node_modules/lodash/_baseIsNaN.js.map +0 -1
- package/dist/node_modules/lodash/_baseIsNative.js.map +0 -1
- package/dist/node_modules/lodash/_baseIsSet.js.map +0 -1
- package/dist/node_modules/lodash/_baseIsTypedArray.js.map +0 -1
- package/dist/node_modules/lodash/_baseIteratee.js.map +0 -1
- package/dist/node_modules/lodash/_baseKeys.js.map +0 -1
- package/dist/node_modules/lodash/_baseKeysIn.js.map +0 -1
- package/dist/node_modules/lodash/_baseLt.js.map +0 -1
- package/dist/node_modules/lodash/_baseMap.js.map +0 -1
- package/dist/node_modules/lodash/_baseMatches.js.map +0 -1
- package/dist/node_modules/lodash/_baseMatchesProperty.js.map +0 -1
- package/dist/node_modules/lodash/_baseOrderBy.js.map +0 -1
- package/dist/node_modules/lodash/_baseProperty.js.map +0 -1
- package/dist/node_modules/lodash/_basePropertyDeep.js.map +0 -1
- package/dist/node_modules/lodash/_baseRange.js.map +0 -1
- package/dist/node_modules/lodash/_baseRest.js.map +0 -1
- package/dist/node_modules/lodash/_baseSetToString.js.map +0 -1
- package/dist/node_modules/lodash/_baseSlice.js.map +0 -1
- package/dist/node_modules/lodash/_baseSome.js.map +0 -1
- package/dist/node_modules/lodash/_baseSortBy.js.map +0 -1
- package/dist/node_modules/lodash/_baseSum.js.map +0 -1
- package/dist/node_modules/lodash/_baseTimes.js.map +0 -1
- package/dist/node_modules/lodash/_baseToString.js.map +0 -1
- package/dist/node_modules/lodash/_baseTrim.js.map +0 -1
- package/dist/node_modules/lodash/_baseUnary.js.map +0 -1
- package/dist/node_modules/lodash/_baseUniq.js.map +0 -1
- package/dist/node_modules/lodash/_baseUnset.js.map +0 -1
- package/dist/node_modules/lodash/_cacheHas.js.map +0 -1
- package/dist/node_modules/lodash/_castPath.js.map +0 -1
- package/dist/node_modules/lodash/_castSlice.js.map +0 -1
- package/dist/node_modules/lodash/_cloneArrayBuffer.js.map +0 -1
- package/dist/node_modules/lodash/_cloneBuffer.js.map +0 -1
- package/dist/node_modules/lodash/_cloneDataView.js.map +0 -1
- package/dist/node_modules/lodash/_cloneRegExp.js.map +0 -1
- package/dist/node_modules/lodash/_cloneSymbol.js.map +0 -1
- package/dist/node_modules/lodash/_cloneTypedArray.js.map +0 -1
- package/dist/node_modules/lodash/_compareAscending.js.map +0 -1
- package/dist/node_modules/lodash/_compareMultiple.js.map +0 -1
- package/dist/node_modules/lodash/_copyArray.js.map +0 -1
- package/dist/node_modules/lodash/_copyObject.js.map +0 -1
- package/dist/node_modules/lodash/_copySymbols.js.map +0 -1
- package/dist/node_modules/lodash/_copySymbolsIn.js.map +0 -1
- package/dist/node_modules/lodash/_coreJsData.js.map +0 -1
- package/dist/node_modules/lodash/_createBaseEach.js.map +0 -1
- package/dist/node_modules/lodash/_createBaseFor.js.map +0 -1
- package/dist/node_modules/lodash/_createCaseFirst.js.map +0 -1
- package/dist/node_modules/lodash/_createFind.js.map +0 -1
- package/dist/node_modules/lodash/_createRange.js.map +0 -1
- package/dist/node_modules/lodash/_createSet.js.map +0 -1
- package/dist/node_modules/lodash/_customOmitClone.js.map +0 -1
- package/dist/node_modules/lodash/_defineProperty.js.map +0 -1
- package/dist/node_modules/lodash/_equalArrays.js.map +0 -1
- package/dist/node_modules/lodash/_equalByTag.js.map +0 -1
- package/dist/node_modules/lodash/_equalObjects.js.map +0 -1
- package/dist/node_modules/lodash/_flatRest.js.map +0 -1
- package/dist/node_modules/lodash/_freeGlobal.js.map +0 -1
- package/dist/node_modules/lodash/_getAllKeys.js.map +0 -1
- package/dist/node_modules/lodash/_getAllKeysIn.js.map +0 -1
- package/dist/node_modules/lodash/_getMapData.js.map +0 -1
- package/dist/node_modules/lodash/_getMatchData.js.map +0 -1
- package/dist/node_modules/lodash/_getNative.js.map +0 -1
- package/dist/node_modules/lodash/_getPrototype.js.map +0 -1
- package/dist/node_modules/lodash/_getRawTag.js.map +0 -1
- package/dist/node_modules/lodash/_getSymbols.js.map +0 -1
- package/dist/node_modules/lodash/_getSymbolsIn.js.map +0 -1
- package/dist/node_modules/lodash/_getTag.js.map +0 -1
- package/dist/node_modules/lodash/_getValue.js.map +0 -1
- package/dist/node_modules/lodash/_hasPath.js.map +0 -1
- package/dist/node_modules/lodash/_hasUnicode.js.map +0 -1
- package/dist/node_modules/lodash/_hashClear.js.map +0 -1
- package/dist/node_modules/lodash/_hashDelete.js.map +0 -1
- package/dist/node_modules/lodash/_hashGet.js.map +0 -1
- package/dist/node_modules/lodash/_hashHas.js.map +0 -1
- package/dist/node_modules/lodash/_hashSet.js.map +0 -1
- package/dist/node_modules/lodash/_initCloneArray.js.map +0 -1
- package/dist/node_modules/lodash/_initCloneByTag.js.map +0 -1
- package/dist/node_modules/lodash/_initCloneObject.js.map +0 -1
- package/dist/node_modules/lodash/_isFlattenable.js.map +0 -1
- package/dist/node_modules/lodash/_isIndex.js.map +0 -1
- package/dist/node_modules/lodash/_isIterateeCall.js.map +0 -1
- package/dist/node_modules/lodash/_isKey.js.map +0 -1
- package/dist/node_modules/lodash/_isKeyable.js.map +0 -1
- package/dist/node_modules/lodash/_isMasked.js.map +0 -1
- package/dist/node_modules/lodash/_isPrototype.js.map +0 -1
- package/dist/node_modules/lodash/_isStrictComparable.js.map +0 -1
- package/dist/node_modules/lodash/_listCacheClear.js.map +0 -1
- package/dist/node_modules/lodash/_listCacheDelete.js.map +0 -1
- package/dist/node_modules/lodash/_listCacheGet.js.map +0 -1
- package/dist/node_modules/lodash/_listCacheHas.js.map +0 -1
- package/dist/node_modules/lodash/_listCacheSet.js.map +0 -1
- package/dist/node_modules/lodash/_mapCacheClear.js.map +0 -1
- package/dist/node_modules/lodash/_mapCacheDelete.js.map +0 -1
- package/dist/node_modules/lodash/_mapCacheGet.js.map +0 -1
- package/dist/node_modules/lodash/_mapCacheHas.js.map +0 -1
- package/dist/node_modules/lodash/_mapCacheSet.js.map +0 -1
- package/dist/node_modules/lodash/_mapToArray.js.map +0 -1
- package/dist/node_modules/lodash/_matchesStrictComparable.js.map +0 -1
- package/dist/node_modules/lodash/_memoizeCapped.js.map +0 -1
- package/dist/node_modules/lodash/_nativeCreate.js.map +0 -1
- package/dist/node_modules/lodash/_nativeKeys.js.map +0 -1
- package/dist/node_modules/lodash/_nativeKeysIn.js.map +0 -1
- package/dist/node_modules/lodash/_nodeUtil.js.map +0 -1
- package/dist/node_modules/lodash/_objectToString.js.map +0 -1
- package/dist/node_modules/lodash/_overArg.js.map +0 -1
- package/dist/node_modules/lodash/_overRest.js.map +0 -1
- package/dist/node_modules/lodash/_parent.js.map +0 -1
- package/dist/node_modules/lodash/_root.js.map +0 -1
- package/dist/node_modules/lodash/_setCacheAdd.js.map +0 -1
- package/dist/node_modules/lodash/_setCacheHas.js.map +0 -1
- package/dist/node_modules/lodash/_setToArray.js.map +0 -1
- package/dist/node_modules/lodash/_setToString.js.map +0 -1
- package/dist/node_modules/lodash/_shortOut.js.map +0 -1
- package/dist/node_modules/lodash/_stackClear.js.map +0 -1
- package/dist/node_modules/lodash/_stackDelete.js.map +0 -1
- package/dist/node_modules/lodash/_stackGet.js.map +0 -1
- package/dist/node_modules/lodash/_stackHas.js.map +0 -1
- package/dist/node_modules/lodash/_stackSet.js.map +0 -1
- package/dist/node_modules/lodash/_strictIndexOf.js.map +0 -1
- package/dist/node_modules/lodash/_stringToArray.js.map +0 -1
- package/dist/node_modules/lodash/_stringToPath.js.map +0 -1
- package/dist/node_modules/lodash/_toKey.js.map +0 -1
- package/dist/node_modules/lodash/_toSource.js.map +0 -1
- package/dist/node_modules/lodash/_trimmedEndIndex.js.map +0 -1
- package/dist/node_modules/lodash/_unicodeToArray.js.map +0 -1
- package/dist/node_modules/lodash/constant.js.map +0 -1
- package/dist/node_modules/lodash/debounce.js.map +0 -1
- package/dist/node_modules/lodash/eq.js.map +0 -1
- package/dist/node_modules/lodash/every.js.map +0 -1
- package/dist/node_modules/lodash/find.js.map +0 -1
- package/dist/node_modules/lodash/findIndex.js.map +0 -1
- package/dist/node_modules/lodash/flatMap.js.map +0 -1
- package/dist/node_modules/lodash/flatten.js.map +0 -1
- package/dist/node_modules/lodash/get.js.map +0 -1
- package/dist/node_modules/lodash/hasIn.js.map +0 -1
- package/dist/node_modules/lodash/identity.js.map +0 -1
- package/dist/node_modules/lodash/isArguments.js.map +0 -1
- package/dist/node_modules/lodash/isArray.js.map +0 -1
- package/dist/node_modules/lodash/isArrayLike.js.map +0 -1
- package/dist/node_modules/lodash/isBoolean.js.map +0 -1
- package/dist/node_modules/lodash/isBuffer.js.map +0 -1
- package/dist/node_modules/lodash/isEqual.js.map +0 -1
- package/dist/node_modules/lodash/isFunction.js.map +0 -1
- package/dist/node_modules/lodash/isLength.js.map +0 -1
- package/dist/node_modules/lodash/isMap.js.map +0 -1
- package/dist/node_modules/lodash/isNaN.js.map +0 -1
- package/dist/node_modules/lodash/isNil.js.map +0 -1
- package/dist/node_modules/lodash/isNumber.js.map +0 -1
- package/dist/node_modules/lodash/isObject.js.map +0 -1
- package/dist/node_modules/lodash/isObjectLike.js.map +0 -1
- package/dist/node_modules/lodash/isPlainObject.js.map +0 -1
- package/dist/node_modules/lodash/isSet.js.map +0 -1
- package/dist/node_modules/lodash/isString.js.map +0 -1
- package/dist/node_modules/lodash/isSymbol.js.map +0 -1
- package/dist/node_modules/lodash/isTypedArray.js.map +0 -1
- package/dist/node_modules/lodash/keys.js.map +0 -1
- package/dist/node_modules/lodash/keysIn.js.map +0 -1
- package/dist/node_modules/lodash/last.js.map +0 -1
- package/dist/node_modules/lodash/map.js.map +0 -1
- package/dist/node_modules/lodash/mapValues.js.map +0 -1
- package/dist/node_modules/lodash/max.js.map +0 -1
- package/dist/node_modules/lodash/maxBy.js.map +0 -1
- package/dist/node_modules/lodash/memoize.js.map +0 -1
- package/dist/node_modules/lodash/min.js.map +0 -1
- package/dist/node_modules/lodash/noop.js.map +0 -1
- package/dist/node_modules/lodash/now.js.map +0 -1
- package/dist/node_modules/lodash/omit.js.map +0 -1
- package/dist/node_modules/lodash/property.js.map +0 -1
- package/dist/node_modules/lodash/range.js.map +0 -1
- package/dist/node_modules/lodash/some.js.map +0 -1
- package/dist/node_modules/lodash/sortBy.js.map +0 -1
- package/dist/node_modules/lodash/stubArray.js.map +0 -1
- package/dist/node_modules/lodash/stubFalse.js.map +0 -1
- package/dist/node_modules/lodash/sumBy.js.map +0 -1
- package/dist/node_modules/lodash/throttle.js.map +0 -1
- package/dist/node_modules/lodash/toFinite.js.map +0 -1
- package/dist/node_modules/lodash/toInteger.js.map +0 -1
- package/dist/node_modules/lodash/toNumber.js.map +0 -1
- package/dist/node_modules/lodash/toString.js.map +0 -1
- package/dist/node_modules/lodash/uniqBy.js.map +0 -1
- package/dist/node_modules/lodash/upperFirst.js.map +0 -1
- package/dist/node_modules/object-assign/index.js.map +0 -1
- package/dist/node_modules/pptxgenjs/dist/pptxgen.es.js.map +0 -1
- package/dist/node_modules/prop-types/checkPropTypes.js.map +0 -1
- package/dist/node_modules/prop-types/factoryWithThrowingShims.js.map +0 -1
- package/dist/node_modules/prop-types/factoryWithTypeCheckers.js.map +0 -1
- package/dist/node_modules/prop-types/index.js.map +0 -1
- package/dist/node_modules/prop-types/lib/ReactPropTypesSecret.js.map +0 -1
- package/dist/node_modules/prop-types/lib/has.js.map +0 -1
- package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js.map +0 -1
- package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.production.min.js.map +0 -1
- package/dist/node_modules/prop-types/node_modules/react-is/index.js.map +0 -1
- package/dist/node_modules/react-is/cjs/react-is.development.js.map +0 -1
- package/dist/node_modules/react-is/cjs/react-is.production.min.js.map +0 -1
- package/dist/node_modules/react-is/index.js.map +0 -1
- package/dist/node_modules/react-smooth/es6/Animate.js.map +0 -1
- package/dist/node_modules/react-smooth/es6/AnimateManager.js.map +0 -1
- package/dist/node_modules/react-smooth/es6/configUpdate.js.map +0 -1
- package/dist/node_modules/react-smooth/es6/easing.js.map +0 -1
- package/dist/node_modules/react-smooth/es6/index.js.map +0 -1
- package/dist/node_modules/react-smooth/es6/setRafTimeout.js.map +0 -1
- package/dist/node_modules/react-smooth/es6/util.js.map +0 -1
- package/dist/node_modules/recharts/es6/cartesian/Area.js.map +0 -1
- package/dist/node_modules/recharts/es6/cartesian/Bar.js.map +0 -1
- package/dist/node_modules/recharts/es6/cartesian/Brush.js.map +0 -1
- package/dist/node_modules/recharts/es6/cartesian/CartesianAxis.js.map +0 -1
- package/dist/node_modules/recharts/es6/cartesian/CartesianGrid.js.map +0 -1
- package/dist/node_modules/recharts/es6/cartesian/ErrorBar.js.map +0 -1
- package/dist/node_modules/recharts/es6/cartesian/Line.js.map +0 -1
- package/dist/node_modules/recharts/es6/cartesian/ReferenceArea.js.map +0 -1
- package/dist/node_modules/recharts/es6/cartesian/ReferenceDot.js.map +0 -1
- package/dist/node_modules/recharts/es6/cartesian/ReferenceLine.js.map +0 -1
- package/dist/node_modules/recharts/es6/cartesian/XAxis.js.map +0 -1
- package/dist/node_modules/recharts/es6/cartesian/YAxis.js.map +0 -1
- package/dist/node_modules/recharts/es6/cartesian/getEquidistantTicks.js.map +0 -1
- package/dist/node_modules/recharts/es6/cartesian/getTicks.js.map +0 -1
- package/dist/node_modules/recharts/es6/chart/AccessibilityManager.js.map +0 -1
- package/dist/node_modules/recharts/es6/chart/AreaChart.js.map +0 -1
- package/dist/node_modules/recharts/es6/chart/BarChart.js.map +0 -1
- package/dist/node_modules/recharts/es6/chart/LineChart.js.map +0 -1
- package/dist/node_modules/recharts/es6/chart/Sankey.js.map +0 -1
- package/dist/node_modules/recharts/es6/chart/Treemap.js.map +0 -1
- package/dist/node_modules/recharts/es6/chart/generateCategoricalChart.js.map +0 -1
- package/dist/node_modules/recharts/es6/component/Cell.js.map +0 -1
- package/dist/node_modules/recharts/es6/component/Cursor.js.map +0 -1
- package/dist/node_modules/recharts/es6/component/DefaultLegendContent.js.map +0 -1
- package/dist/node_modules/recharts/es6/component/DefaultTooltipContent.js.map +0 -1
- package/dist/node_modules/recharts/es6/component/Label.js.map +0 -1
- package/dist/node_modules/recharts/es6/component/LabelList.js.map +0 -1
- package/dist/node_modules/recharts/es6/component/Legend.js.map +0 -1
- package/dist/node_modules/recharts/es6/component/ResponsiveContainer.js.map +0 -1
- package/dist/node_modules/recharts/es6/component/Text.js.map +0 -1
- package/dist/node_modules/recharts/es6/component/Tooltip.js.map +0 -1
- package/dist/node_modules/recharts/es6/component/TooltipBoundingBox.js.map +0 -1
- package/dist/node_modules/recharts/es6/container/Layer.js.map +0 -1
- package/dist/node_modules/recharts/es6/container/Surface.js.map +0 -1
- package/dist/node_modules/recharts/es6/context/chartLayoutContext.js.map +0 -1
- package/dist/node_modules/recharts/es6/shape/Cross.js.map +0 -1
- package/dist/node_modules/recharts/es6/shape/Curve.js.map +0 -1
- package/dist/node_modules/recharts/es6/shape/Dot.js.map +0 -1
- package/dist/node_modules/recharts/es6/shape/Polygon.js.map +0 -1
- package/dist/node_modules/recharts/es6/shape/Rectangle.js.map +0 -1
- package/dist/node_modules/recharts/es6/shape/Sector.js.map +0 -1
- package/dist/node_modules/recharts/es6/shape/Symbols.js.map +0 -1
- package/dist/node_modules/recharts/es6/shape/Trapezoid.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/ActiveShapeUtils.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/BarUtils.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/CartesianUtils.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/ChartUtils.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/Constants.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/CssPrefixUtils.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/DOMUtils.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/DataUtils.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/DetectReferenceElementsDomain.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/Events.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/Global.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/IfOverflowMatches.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/LogUtils.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/PolarUtils.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/ReactUtils.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/ReduceCSSCalc.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/ShallowEqual.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/TickUtils.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/calculateViewBox.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/cursor/getCursorPoints.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/cursor/getCursorRectangle.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/cursor/getRadialCursorPoints.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/getEveryNthWithCondition.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/getLegendProps.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/isDomainSpecifiedByUser.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/payload/getUniqPayload.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/tooltip/translate.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/types.js.map +0 -1
- package/dist/node_modules/recharts-scale/es6/getNiceTickValues.js.map +0 -1
- package/dist/node_modules/recharts-scale/es6/util/arithmetic.js.map +0 -1
- package/dist/node_modules/recharts-scale/es6/util/utils.js.map +0 -1
- package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js.map +0 -1
- package/dist/node_modules/tiny-invariant/dist/esm/tiny-invariant.js.map +0 -1
- package/dist/node_modules/victory-vendor/es/d3-scale.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/export/convertFileContentToUint8ArrayBrowser.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/export/convertFilesContentToUint8Arrays.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/export/downloadBlob.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/export/writeXlsxFileBrowser.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/export/writeXlsxFileUniversal.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/getSheetData/getSheetData.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xlsx/features/conditionalFormatting.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xlsx/features/images.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xlsx/features/stickyRowsOrColumns.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xlsx/files/_Content_Types_.xml.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xlsx/files/drawing.xml.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xlsx/files/drawing.xml.rels.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xlsx/files/rels.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xlsx/files/sharedStrings.xml.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/cell.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/column.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/columns.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/drawingReference.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/helpers/getCellStyleProperties.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/mergedCellsDescription.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/pageMargins.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/pageSetup.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/processMergedCells.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/row.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/sheet.xml.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/sheetData.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/sheetViews.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml.rels.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xlsx/files/styles.xml.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xlsx/files/workbook.xml.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xlsx/files/workbook.xml.rels.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xlsx/generateXlsxFileContents.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xlsx/getFeatures.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/convertDateToSerialNumber.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/features/getAdditionalContent.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/features/getElementXml.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/features/getWrittenFiles.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/features/transformContent.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getAlignmentXml.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getBorderXml.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getCellAddress.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getFileExtensionForContentType.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getFillXml.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getFontXml.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getOrderOfSiblings.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getXlsxColorForHexColor.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/hasAlignment.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/hasBorder.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/hasFill.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/hasFont.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/isCellObject.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/isObject.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/orderOfSiblings.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xlsx/initializeSharedStrings.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xlsx/initializeSheets.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xlsx/initializeStyles.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xlsx/validateSheetData.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xlsx/validateSheetName.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xml/appendMarkupInsideElement.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xml/applyEnclosingElementOffset.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xml/escapeXmlSpecialCharacters.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xml/findElement.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xml/findElementInsideElement.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xml/findElementsNonRecursive_.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xml/getAttributesString.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xml/getChildElements.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xml/getClosingTagMarkup.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xml/getMarkupInsideElement.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xml/getOpeningTagMarkup.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xml/getSelfClosingTagMarkup.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xml/insertElementMarkupAccordingToOrderOfSiblings.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xml/prependMarkupInsideElement.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xml/removeInvalidXmlCharacters.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xml/replaceElement.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xml/sanitizeAttributeName.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xml/sanitizeAttributeValue.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xml/sanitizeTextContent.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/xml/setMarkupInsideElement.js.map +0 -1
- package/dist/node_modules/write-excel-file/modules/zip/zipToArrayBuffer.js.map +0 -1
- package/dist/planmagnet/PlanMagnetRoot.d.ts.map +0 -1
- package/dist/planmagnet/PlanMagnetRoot.js.map +0 -1
- package/dist/planmagnet/PlanMagnetRoutes.d.ts.map +0 -1
- package/dist/planmagnet/PlanMagnetRoutes.js.map +0 -1
- package/dist/planmagnet/activity/activityDescribe.d.ts.map +0 -1
- package/dist/planmagnet/activity/activityDescribe.js.map +0 -1
- package/dist/planmagnet/activity/relativeTime.d.ts.map +0 -1
- package/dist/planmagnet/activity/relativeTime.js.map +0 -1
- package/dist/planmagnet/admin/PlanMagnetAdminRoot.d.ts.map +0 -1
- package/dist/planmagnet/admin/PlanMagnetAdminRoot.js.map +0 -1
- package/dist/planmagnet/automation/AutomationExecutionsPanel.d.ts.map +0 -1
- package/dist/planmagnet/automation/AutomationExecutionsPanel.js.map +0 -1
- package/dist/planmagnet/automation/AutomationRuleFields.d.ts.map +0 -1
- package/dist/planmagnet/automation/AutomationRuleFields.js.map +0 -1
- package/dist/planmagnet/automation/automationRuleTypes.d.ts.map +0 -1
- package/dist/planmagnet/automation/automationRuleTypes.js.map +0 -1
- package/dist/planmagnet/board/BoardViewBar.d.ts.map +0 -1
- package/dist/planmagnet/board/BoardViewBar.js.map +0 -1
- package/dist/planmagnet/board/BulkActions.d.ts.map +0 -1
- package/dist/planmagnet/board/BulkActions.js.map +0 -1
- package/dist/planmagnet/board/ProjectBoard.d.ts.map +0 -1
- package/dist/planmagnet/board/ProjectBoard.js.map +0 -1
- package/dist/planmagnet/board/boardViewConfig.d.ts.map +0 -1
- package/dist/planmagnet/board/boardViewConfig.js.map +0 -1
- package/dist/planmagnet/budgets/BudgetControls.d.ts.map +0 -1
- package/dist/planmagnet/budgets/BudgetControls.js.map +0 -1
- package/dist/planmagnet/budgets/ExpenseControls.d.ts.map +0 -1
- package/dist/planmagnet/budgets/ExpenseControls.js.map +0 -1
- package/dist/planmagnet/budgets/ProjectBudgetsSummary.d.ts.map +0 -1
- package/dist/planmagnet/budgets/ProjectBudgetsSummary.js.map +0 -1
- package/dist/planmagnet/budgets/budgetMath.d.ts.map +0 -1
- package/dist/planmagnet/budgets/budgetMath.js.map +0 -1
- package/dist/planmagnet/comments/CommentAttachmentUpload.d.ts.map +0 -1
- package/dist/planmagnet/comments/CommentAttachmentUpload.js.map +0 -1
- package/dist/planmagnet/comments/CommentAttachments.d.ts.map +0 -1
- package/dist/planmagnet/comments/CommentAttachments.js.map +0 -1
- package/dist/planmagnet/comments/CommentBody.d.ts.map +0 -1
- package/dist/planmagnet/comments/CommentBody.js.map +0 -1
- package/dist/planmagnet/comments/CommentThread.d.ts.map +0 -1
- package/dist/planmagnet/comments/CommentThread.js.map +0 -1
- package/dist/planmagnet/comments/MentionComposer.d.ts.map +0 -1
- package/dist/planmagnet/comments/MentionComposer.js.map +0 -1
- package/dist/planmagnet/comments/RoadmapComments.d.ts.map +0 -1
- package/dist/planmagnet/comments/RoadmapComments.js.map +0 -1
- package/dist/planmagnet/comments/TargetComments.d.ts.map +0 -1
- package/dist/planmagnet/comments/TargetComments.js.map +0 -1
- package/dist/planmagnet/comments/WorkItemActivity.d.ts.map +0 -1
- package/dist/planmagnet/comments/WorkItemActivity.js.map +0 -1
- package/dist/planmagnet/comments/WorkItemComments.d.ts.map +0 -1
- package/dist/planmagnet/comments/WorkItemComments.js.map +0 -1
- package/dist/planmagnet/comments/commentAttachmentUploadClient.d.ts.map +0 -1
- package/dist/planmagnet/comments/commentAttachmentUploadClient.js.map +0 -1
- package/dist/planmagnet/comments/commentImageTokens.d.ts.map +0 -1
- package/dist/planmagnet/comments/commentImageTokens.js.map +0 -1
- package/dist/planmagnet/comments/commentTokens.d.ts.map +0 -1
- package/dist/planmagnet/comments/commentTokens.js.map +0 -1
- package/dist/planmagnet/comments/fileDisplay.d.ts.map +0 -1
- package/dist/planmagnet/comments/fileDisplay.js.map +0 -1
- package/dist/planmagnet/comments/useCommentFileUrl.d.ts.map +0 -1
- package/dist/planmagnet/comments/useCommentFileUrl.js.map +0 -1
- package/dist/planmagnet/controls/AutomationRuleControls.d.ts.map +0 -1
- package/dist/planmagnet/controls/AutomationRuleControls.js.map +0 -1
- package/dist/planmagnet/controls/CompetitorControls.d.ts.map +0 -1
- package/dist/planmagnet/controls/CompetitorControls.js.map +0 -1
- package/dist/planmagnet/controls/ConfirmButton.d.ts.map +0 -1
- package/dist/planmagnet/controls/ConfirmButton.js.map +0 -1
- package/dist/planmagnet/controls/CustomFieldControls.d.ts.map +0 -1
- package/dist/planmagnet/controls/CustomFieldControls.js.map +0 -1
- package/dist/planmagnet/controls/CustomFieldValuesPanel.d.ts.map +0 -1
- package/dist/planmagnet/controls/CustomFieldValuesPanel.js.map +0 -1
- package/dist/planmagnet/controls/FeatureControls.d.ts.map +0 -1
- package/dist/planmagnet/controls/FeatureControls.js.map +0 -1
- package/dist/planmagnet/controls/FeatureTriage.d.ts.map +0 -1
- package/dist/planmagnet/controls/FeatureTriage.js.map +0 -1
- package/dist/planmagnet/controls/FeedbackControls.d.ts.map +0 -1
- package/dist/planmagnet/controls/FeedbackControls.js.map +0 -1
- package/dist/planmagnet/controls/LiveStatus.d.ts.map +0 -1
- package/dist/planmagnet/controls/LiveStatus.js.map +0 -1
- package/dist/planmagnet/controls/MilestoneControls.d.ts.map +0 -1
- package/dist/planmagnet/controls/MilestoneControls.js.map +0 -1
- package/dist/planmagnet/controls/ObjectiveControls.d.ts.map +0 -1
- package/dist/planmagnet/controls/ObjectiveControls.js.map +0 -1
- package/dist/planmagnet/controls/Pickers.d.ts.map +0 -1
- package/dist/planmagnet/controls/Pickers.js.map +0 -1
- package/dist/planmagnet/controls/PortfolioControls.d.ts.map +0 -1
- package/dist/planmagnet/controls/PortfolioControls.js.map +0 -1
- package/dist/planmagnet/controls/PrioritizationControls.d.ts.map +0 -1
- package/dist/planmagnet/controls/PrioritizationControls.js.map +0 -1
- package/dist/planmagnet/controls/ProgramControls.d.ts.map +0 -1
- package/dist/planmagnet/controls/ProgramControls.js.map +0 -1
- package/dist/planmagnet/controls/ProjectControls.d.ts.map +0 -1
- package/dist/planmagnet/controls/ProjectControls.js.map +0 -1
- package/dist/planmagnet/controls/QualityGateControls.d.ts.map +0 -1
- package/dist/planmagnet/controls/QualityGateControls.js.map +0 -1
- package/dist/planmagnet/controls/ReleaseControls.d.ts.map +0 -1
- package/dist/planmagnet/controls/ReleaseControls.js.map +0 -1
- package/dist/planmagnet/controls/RiskControls.d.ts.map +0 -1
- package/dist/planmagnet/controls/RiskControls.js.map +0 -1
- package/dist/planmagnet/controls/SyncControls.d.ts.map +0 -1
- package/dist/planmagnet/controls/SyncControls.js.map +0 -1
- package/dist/planmagnet/controls/TemplateControls.d.ts.map +0 -1
- package/dist/planmagnet/controls/TemplateControls.js.map +0 -1
- package/dist/planmagnet/controls/WebhookSubscriptionControls.d.ts.map +0 -1
- package/dist/planmagnet/controls/WebhookSubscriptionControls.js.map +0 -1
- package/dist/planmagnet/controls/WorkItemControls.d.ts.map +0 -1
- package/dist/planmagnet/controls/WorkItemControls.js.map +0 -1
- package/dist/planmagnet/create/CreateDialogs.d.ts.map +0 -1
- package/dist/planmagnet/create/CreateDialogs.js.map +0 -1
- package/dist/planmagnet/dashboards/DashboardUI.d.ts.map +0 -1
- package/dist/planmagnet/dashboards/DashboardUI.js.map +0 -1
- package/dist/planmagnet/dashboards/cards/DeliveryTimelineCard.d.ts.map +0 -1
- package/dist/planmagnet/dashboards/cards/DeliveryTimelineCard.js.map +0 -1
- package/dist/planmagnet/dashboards/cards/ObjectivesProgressCard.d.ts.map +0 -1
- package/dist/planmagnet/dashboards/cards/ObjectivesProgressCard.js.map +0 -1
- package/dist/planmagnet/dashboards/cards/PortfolioHealthCard.d.ts.map +0 -1
- package/dist/planmagnet/dashboards/cards/PortfolioHealthCard.js.map +0 -1
- package/dist/planmagnet/dashboards/cards/QualityMetricsCard.d.ts.map +0 -1
- package/dist/planmagnet/dashboards/cards/QualityMetricsCard.js.map +0 -1
- package/dist/planmagnet/dashboards/cards/RiskSeverityCard.d.ts.map +0 -1
- package/dist/planmagnet/dashboards/cards/RiskSeverityCard.js.map +0 -1
- package/dist/planmagnet/dashboards/cards/RoadmapHorizonCard.d.ts.map +0 -1
- package/dist/planmagnet/dashboards/cards/RoadmapHorizonCard.js.map +0 -1
- package/dist/planmagnet/dashboards/cards/SprintCapacityCard.d.ts.map +0 -1
- package/dist/planmagnet/dashboards/cards/SprintCapacityCard.js.map +0 -1
- package/dist/planmagnet/dashboards/cards/TaskCompletionCard.d.ts.map +0 -1
- package/dist/planmagnet/dashboards/cards/TaskCompletionCard.js.map +0 -1
- package/dist/planmagnet/dashboards/cards/TeamCapacityCard.d.ts.map +0 -1
- package/dist/planmagnet/dashboards/cards/TeamCapacityCard.js.map +0 -1
- package/dist/planmagnet/dashboards/cards/TeamOverviewCard.d.ts.map +0 -1
- package/dist/planmagnet/dashboards/cards/TeamOverviewCard.js.map +0 -1
- package/dist/planmagnet/dashboards/cards/TeamWorkloadCard.d.ts.map +0 -1
- package/dist/planmagnet/dashboards/cards/TeamWorkloadCard.js.map +0 -1
- package/dist/planmagnet/dashboards/cards/TimeLoggedCard.d.ts.map +0 -1
- package/dist/planmagnet/dashboards/cards/TimeLoggedCard.js.map +0 -1
- package/dist/planmagnet/dependency/DependencyGraph.d.ts.map +0 -1
- package/dist/planmagnet/dependency/DependencyGraph.js.map +0 -1
- package/dist/planmagnet/dependency/DependencyPanel.d.ts.map +0 -1
- package/dist/planmagnet/dependency/DependencyPanel.js.map +0 -1
- package/dist/planmagnet/dependency/GanttChart.d.ts.map +0 -1
- package/dist/planmagnet/dependency/GanttChart.js.map +0 -1
- package/dist/planmagnet/dependency/useProjectWorkItemsGraph.d.ts.map +0 -1
- package/dist/planmagnet/dependency/useProjectWorkItemsGraph.js.map +0 -1
- package/dist/planmagnet/discussion/WorkItemDiscussionPanel.d.ts.map +0 -1
- package/dist/planmagnet/discussion/WorkItemDiscussionPanel.js.map +0 -1
- package/dist/planmagnet/docs/DocDiffView.d.ts.map +0 -1
- package/dist/planmagnet/docs/DocDiffView.js.map +0 -1
- package/dist/planmagnet/docs/DocStatusBadge.d.ts.map +0 -1
- package/dist/planmagnet/docs/DocStatusBadge.js.map +0 -1
- package/dist/planmagnet/docs/DocSuggestionsPanel.d.ts.map +0 -1
- package/dist/planmagnet/docs/DocSuggestionsPanel.js.map +0 -1
- package/dist/planmagnet/docs/DocVersionCompare.d.ts.map +0 -1
- package/dist/planmagnet/docs/DocVersionCompare.js.map +0 -1
- package/dist/planmagnet/export/ExportWorkItemsButton.d.ts.map +0 -1
- package/dist/planmagnet/export/ExportWorkItemsButton.js.map +0 -1
- package/dist/planmagnet/export/workItemsCsv.d.ts.map +0 -1
- package/dist/planmagnet/export/workItemsCsv.js.map +0 -1
- package/dist/planmagnet/forecast/DeliveryForecastCard.d.ts.map +0 -1
- package/dist/planmagnet/forecast/DeliveryForecastCard.js.map +0 -1
- package/dist/planmagnet/forecast/ProjectOutlookCard.d.ts.map +0 -1
- package/dist/planmagnet/forecast/ProjectOutlookCard.js.map +0 -1
- package/dist/planmagnet/forecast/ProjectRiskSummaryCard.d.ts.map +0 -1
- package/dist/planmagnet/forecast/ProjectRiskSummaryCard.js.map +0 -1
- package/dist/planmagnet/forecast/ResourceForecastCard.d.ts.map +0 -1
- package/dist/planmagnet/forecast/ResourceForecastCard.js.map +0 -1
- package/dist/planmagnet/forecast/riskFlags.d.ts.map +0 -1
- package/dist/planmagnet/forecast/riskFlags.js.map +0 -1
- package/dist/planmagnet/hooks/useCounts.d.ts.map +0 -1
- package/dist/planmagnet/hooks/useCounts.js.map +0 -1
- package/dist/planmagnet/hooks/useEntityId.d.ts.map +0 -1
- package/dist/planmagnet/hooks/useEntityId.js.map +0 -1
- package/dist/planmagnet/hooks/useLiveRefresh.d.ts.map +0 -1
- package/dist/planmagnet/hooks/useLiveRefresh.js.map +0 -1
- package/dist/planmagnet/hooks/usePresence.d.ts.map +0 -1
- package/dist/planmagnet/hooks/usePresence.js.map +0 -1
- package/dist/planmagnet/hooks/useProjectWorkflow.d.ts.map +0 -1
- package/dist/planmagnet/hooks/useProjectWorkflow.js.map +0 -1
- package/dist/planmagnet/import/exportColumns.d.ts.map +0 -1
- package/dist/planmagnet/import/exportColumns.js.map +0 -1
- package/dist/planmagnet/index.d.ts.map +0 -1
- package/dist/planmagnet/integrations/routes.d.ts.map +0 -1
- package/dist/planmagnet/integrations/routes.js.map +0 -1
- package/dist/planmagnet/integrations/syncTypes.d.ts.map +0 -1
- package/dist/planmagnet/integrations/syncTypes.js.map +0 -1
- package/dist/planmagnet/integrations/useSyncProviderCapabilities.d.ts.map +0 -1
- package/dist/planmagnet/integrations/useSyncProviderCapabilities.js.map +0 -1
- package/dist/planmagnet/links/CodeLinksPanel.d.ts.map +0 -1
- package/dist/planmagnet/links/CodeLinksPanel.js.map +0 -1
- package/dist/planmagnet/links/IssueLinksPanel.d.ts.map +0 -1
- package/dist/planmagnet/links/IssueLinksPanel.js.map +0 -1
- package/dist/planmagnet/meetings/MeetingActionItemsPanel.d.ts.map +0 -1
- package/dist/planmagnet/meetings/MeetingActionItemsPanel.js.map +0 -1
- package/dist/planmagnet/meetings/MeetingsCard.d.ts.map +0 -1
- package/dist/planmagnet/meetings/MeetingsCard.js.map +0 -1
- package/dist/planmagnet/meetings/ScheduleCeremoniesDialog.d.ts.map +0 -1
- package/dist/planmagnet/meetings/ScheduleCeremoniesDialog.js.map +0 -1
- package/dist/planmagnet/meetings/ScheduleMeetingDialog.d.ts.map +0 -1
- package/dist/planmagnet/meetings/ScheduleMeetingDialog.js.map +0 -1
- package/dist/planmagnet/meetings/UnlinkMeetingDialog.d.ts.map +0 -1
- package/dist/planmagnet/meetings/UnlinkMeetingDialog.js.map +0 -1
- package/dist/planmagnet/meetings/meetingActions.d.ts.map +0 -1
- package/dist/planmagnet/meetings/meetingActions.js.map +0 -1
- package/dist/planmagnet/meetings/meetingGraphql.d.ts.map +0 -1
- package/dist/planmagnet/meetings/meetingGraphql.js.map +0 -1
- package/dist/planmagnet/meetings/meetingModel.d.ts.map +0 -1
- package/dist/planmagnet/meetings/meetingModel.js.map +0 -1
- package/dist/planmagnet/milestones/MilestoneControls.d.ts.map +0 -1
- package/dist/planmagnet/milestones/MilestoneControls.js.map +0 -1
- package/dist/planmagnet/pages/ActivityActivityPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/ActivityActivityPagePage.js.map +0 -1
- package/dist/planmagnet/pages/AiActivityPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/AiActivityPagePage.js.map +0 -1
- package/dist/planmagnet/pages/AiPlanPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/AiPlanPagePage.js.map +0 -1
- package/dist/planmagnet/pages/AnalyticsAnalyticsPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/AnalyticsAnalyticsPagePage.js.map +0 -1
- package/dist/planmagnet/pages/AutomationAutomationRuleDetailPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/AutomationAutomationRuleDetailPagePage.js.map +0 -1
- package/dist/planmagnet/pages/AutomationAutomationRulesPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/AutomationAutomationRulesPagePage.js.map +0 -1
- package/dist/planmagnet/pages/AutomationCreateAutomationRulePagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/AutomationCreateAutomationRulePagePage.js.map +0 -1
- package/dist/planmagnet/pages/CompetitorsCompetitorDetailPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/CompetitorsCompetitorDetailPagePage.js.map +0 -1
- package/dist/planmagnet/pages/CompetitorsCompetitorsPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/CompetitorsCompetitorsPagePage.js.map +0 -1
- package/dist/planmagnet/pages/CompetitorsCreateCompetitorPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/CompetitorsCreateCompetitorPagePage.js.map +0 -1
- package/dist/planmagnet/pages/CompetitorsEditCompetitorPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/CompetitorsEditCompetitorPagePage.js.map +0 -1
- package/dist/planmagnet/pages/DashboardDashboardPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/DashboardDashboardPagePage.js.map +0 -1
- package/dist/planmagnet/pages/DashboardsExecutivePagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/DashboardsExecutivePagePage.js.map +0 -1
- package/dist/planmagnet/pages/DashboardsLeadershipPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/DashboardsLeadershipPagePage.js.map +0 -1
- package/dist/planmagnet/pages/DashboardsProjectManagerPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/DashboardsProjectManagerPagePage.js.map +0 -1
- package/dist/planmagnet/pages/DashboardsTeamUtilizationPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/DashboardsTeamUtilizationPagePage.js.map +0 -1
- package/dist/planmagnet/pages/DocsDocDetailPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/DocsDocDetailPagePage.js.map +0 -1
- package/dist/planmagnet/pages/DocsDocsPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/DocsDocsPagePage.js.map +0 -1
- package/dist/planmagnet/pages/GoalsCreateObjectivePagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/GoalsCreateObjectivePagePage.js.map +0 -1
- package/dist/planmagnet/pages/GoalsGoalsPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/GoalsGoalsPagePage.js.map +0 -1
- package/dist/planmagnet/pages/GoalsObjectiveDetailPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/GoalsObjectiveDetailPagePage.js.map +0 -1
- package/dist/planmagnet/pages/IntegrationsNewSyncPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/IntegrationsNewSyncPagePage.js.map +0 -1
- package/dist/planmagnet/pages/IntegrationsSyncDetailPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/IntegrationsSyncDetailPagePage.js.map +0 -1
- package/dist/planmagnet/pages/IntegrationsSyncsPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/IntegrationsSyncsPagePage.js.map +0 -1
- package/dist/planmagnet/pages/IntegrationsWebhooksPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/IntegrationsWebhooksPagePage.js.map +0 -1
- package/dist/planmagnet/pages/MeetingsMeetingDetailPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/MeetingsMeetingDetailPagePage.js.map +0 -1
- package/dist/planmagnet/pages/MeetingsMeetingsPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/MeetingsMeetingsPagePage.js.map +0 -1
- package/dist/planmagnet/pages/NotFoundPage.d.ts.map +0 -1
- package/dist/planmagnet/pages/NotFoundPage.js.map +0 -1
- package/dist/planmagnet/pages/PortfoliosCreatePortfolioPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/PortfoliosCreatePortfolioPagePage.js.map +0 -1
- package/dist/planmagnet/pages/PortfoliosEditPortfolioPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/PortfoliosEditPortfolioPagePage.js.map +0 -1
- package/dist/planmagnet/pages/PortfoliosPortfolioDetailPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/PortfoliosPortfolioDetailPagePage.js.map +0 -1
- package/dist/planmagnet/pages/PortfoliosPortfoliosPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/PortfoliosPortfoliosPagePage.js.map +0 -1
- package/dist/planmagnet/pages/ProductsCreateProductPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/ProductsCreateProductPagePage.js.map +0 -1
- package/dist/planmagnet/pages/ProductsCreateRoadmapPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/ProductsCreateRoadmapPagePage.js.map +0 -1
- package/dist/planmagnet/pages/ProductsCustomerSatisfactionPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/ProductsCustomerSatisfactionPagePage.js.map +0 -1
- package/dist/planmagnet/pages/ProductsEditProductPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/ProductsEditProductPagePage.js.map +0 -1
- package/dist/planmagnet/pages/ProductsEditReleasePagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/ProductsEditReleasePagePage.js.map +0 -1
- package/dist/planmagnet/pages/ProductsEditRoadmapPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/ProductsEditRoadmapPagePage.js.map +0 -1
- package/dist/planmagnet/pages/ProductsFeatureAnalyticsPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/ProductsFeatureAnalyticsPagePage.js.map +0 -1
- package/dist/planmagnet/pages/ProductsFeatureDetailPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/ProductsFeatureDetailPagePage.js.map +0 -1
- package/dist/planmagnet/pages/ProductsFeaturesPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/ProductsFeaturesPagePage.js.map +0 -1
- package/dist/planmagnet/pages/ProductsNewFeaturePagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/ProductsNewFeaturePagePage.js.map +0 -1
- package/dist/planmagnet/pages/ProductsPrioritizationPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/ProductsPrioritizationPagePage.js.map +0 -1
- package/dist/planmagnet/pages/ProductsProductDetailPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/ProductsProductDetailPagePage.js.map +0 -1
- package/dist/planmagnet/pages/ProductsProductFeatureDetailPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/ProductsProductFeatureDetailPagePage.js.map +0 -1
- package/dist/planmagnet/pages/ProductsProductHierarchyPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/ProductsProductHierarchyPagePage.js.map +0 -1
- package/dist/planmagnet/pages/ProductsProductLinesPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/ProductsProductLinesPagePage.js.map +0 -1
- package/dist/planmagnet/pages/ProductsProductsPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/ProductsProductsPagePage.js.map +0 -1
- package/dist/planmagnet/pages/ProductsReleaseDetailPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/ProductsReleaseDetailPagePage.js.map +0 -1
- package/dist/planmagnet/pages/ProductsReleasesPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/ProductsReleasesPagePage.js.map +0 -1
- package/dist/planmagnet/pages/ProductsRoadmapAnalyticsPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/ProductsRoadmapAnalyticsPagePage.js.map +0 -1
- package/dist/planmagnet/pages/ProductsRoadmapDetailPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/ProductsRoadmapDetailPagePage.js.map +0 -1
- package/dist/planmagnet/pages/ProductsRoadmapsPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/ProductsRoadmapsPagePage.js.map +0 -1
- package/dist/planmagnet/pages/ProgramsCreateProgramPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/ProgramsCreateProgramPagePage.js.map +0 -1
- package/dist/planmagnet/pages/ProgramsEditProgramPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/ProgramsEditProgramPagePage.js.map +0 -1
- package/dist/planmagnet/pages/ProgramsProgramDetailPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/ProgramsProgramDetailPagePage.js.map +0 -1
- package/dist/planmagnet/pages/ProgramsProgramsPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/ProgramsProgramsPagePage.js.map +0 -1
- package/dist/planmagnet/pages/ProjectsActiveProjectsPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/ProjectsActiveProjectsPagePage.js.map +0 -1
- package/dist/planmagnet/pages/ProjectsAtRiskPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/ProjectsAtRiskPagePage.js.map +0 -1
- package/dist/planmagnet/pages/ProjectsBudgetDetailPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/ProjectsBudgetDetailPagePage.js.map +0 -1
- package/dist/planmagnet/pages/ProjectsBudgetsPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/ProjectsBudgetsPagePage.js.map +0 -1
- package/dist/planmagnet/pages/ProjectsCreateProjectPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/ProjectsCreateProjectPagePage.js.map +0 -1
- package/dist/planmagnet/pages/ProjectsCriticalPathPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/ProjectsCriticalPathPagePage.js.map +0 -1
- package/dist/planmagnet/pages/ProjectsCustomFieldsPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/ProjectsCustomFieldsPagePage.js.map +0 -1
- package/dist/planmagnet/pages/ProjectsEditProjectPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/ProjectsEditProjectPagePage.js.map +0 -1
- package/dist/planmagnet/pages/ProjectsGanttPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/ProjectsGanttPagePage.js.map +0 -1
- package/dist/planmagnet/pages/ProjectsMilestoneDetailPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/ProjectsMilestoneDetailPagePage.js.map +0 -1
- package/dist/planmagnet/pages/ProjectsMilestonesPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/ProjectsMilestonesPagePage.js.map +0 -1
- package/dist/planmagnet/pages/ProjectsPlanningDetailPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/ProjectsPlanningDetailPagePage.js.map +0 -1
- package/dist/planmagnet/pages/ProjectsPlanningEditPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/ProjectsPlanningEditPagePage.js.map +0 -1
- package/dist/planmagnet/pages/ProjectsPlanningPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/ProjectsPlanningPagePage.js.map +0 -1
- package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.js.map +0 -1
- package/dist/planmagnet/pages/ProjectsProjectsPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/ProjectsProjectsPagePage.js.map +0 -1
- package/dist/planmagnet/pages/ProjectsQualityGatesPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/ProjectsQualityGatesPagePage.js.map +0 -1
- package/dist/planmagnet/pages/ProjectsWorkflowPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/ProjectsWorkflowPagePage.js.map +0 -1
- package/dist/planmagnet/pages/ReportsCreateReportPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/ReportsCreateReportPagePage.js.map +0 -1
- package/dist/planmagnet/pages/ReportsEditReportPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/ReportsEditReportPagePage.js.map +0 -1
- package/dist/planmagnet/pages/ReportsReportPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/ReportsReportPagePage.js.map +0 -1
- package/dist/planmagnet/pages/ReportsReportsPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/ReportsReportsPagePage.js.map +0 -1
- package/dist/planmagnet/pages/RisksRiskDetailPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/RisksRiskDetailPagePage.js.map +0 -1
- package/dist/planmagnet/pages/RisksRiskRegisterPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/RisksRiskRegisterPagePage.js.map +0 -1
- package/dist/planmagnet/pages/SprintsStartSprintPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/SprintsStartSprintPagePage.js.map +0 -1
- package/dist/planmagnet/pages/TasksCreateTaskPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/TasksCreateTaskPagePage.js.map +0 -1
- package/dist/planmagnet/pages/TasksEditTaskPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/TasksEditTaskPagePage.js.map +0 -1
- package/dist/planmagnet/pages/TasksImportPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/TasksImportPagePage.js.map +0 -1
- package/dist/planmagnet/pages/TasksMyDashboardPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/TasksMyDashboardPagePage.js.map +0 -1
- package/dist/planmagnet/pages/TasksMyWorkPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/TasksMyWorkPagePage.js.map +0 -1
- package/dist/planmagnet/pages/TasksTaskDetailPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/TasksTaskDetailPagePage.js.map +0 -1
- package/dist/planmagnet/pages/TasksTasksPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/TasksTasksPagePage.js.map +0 -1
- package/dist/planmagnet/pages/TasksTimeEntriesPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/TasksTimeEntriesPagePage.js.map +0 -1
- package/dist/planmagnet/pages/TasksTimesheetDetailPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/TasksTimesheetDetailPagePage.js.map +0 -1
- package/dist/planmagnet/pages/TasksTimesheetsPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/TasksTimesheetsPagePage.js.map +0 -1
- package/dist/planmagnet/pages/TeamCreateTeamPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/TeamCreateTeamPagePage.js.map +0 -1
- package/dist/planmagnet/pages/TeamInviteMemberPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/TeamInviteMemberPagePage.js.map +0 -1
- package/dist/planmagnet/pages/TeamTeamDetailPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/TeamTeamDetailPagePage.js.map +0 -1
- package/dist/planmagnet/pages/TeamTeamEditPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/TeamTeamEditPagePage.js.map +0 -1
- package/dist/planmagnet/pages/TeamTeamPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/TeamTeamPagePage.js.map +0 -1
- package/dist/planmagnet/pages/TeamTeamsListPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/TeamTeamsListPagePage.js.map +0 -1
- package/dist/planmagnet/pages/TemplatesEditTemplatePagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/TemplatesEditTemplatePagePage.js.map +0 -1
- package/dist/planmagnet/pages/TemplatesTemplatesPagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/TemplatesTemplatesPagePage.js.map +0 -1
- package/dist/planmagnet/pages/WorkspaceCreateWorkspacePagePage.d.ts.map +0 -1
- package/dist/planmagnet/pages/WorkspaceCreateWorkspacePagePage.js.map +0 -1
- package/dist/planmagnet/pages/analytics/DeliveryHealthCards.d.ts.map +0 -1
- package/dist/planmagnet/pages/analytics/DeliveryHealthCards.js.map +0 -1
- package/dist/planmagnet/pages/analytics/DeliveryKpisCard.d.ts.map +0 -1
- package/dist/planmagnet/pages/analytics/DeliveryKpisCard.js.map +0 -1
- package/dist/planmagnet/pages/analytics/MetricsCard.d.ts.map +0 -1
- package/dist/planmagnet/pages/analytics/MetricsCard.js.map +0 -1
- package/dist/planmagnet/pages/analytics/QualityMetricsCard.d.ts.map +0 -1
- package/dist/planmagnet/pages/analytics/QualityMetricsCard.js.map +0 -1
- package/dist/planmagnet/pages/analytics/SprintDeliveryCards.d.ts.map +0 -1
- package/dist/planmagnet/pages/analytics/SprintDeliveryCards.js.map +0 -1
- package/dist/planmagnet/pages/analytics/StatusFlowCard.d.ts.map +0 -1
- package/dist/planmagnet/pages/analytics/StatusFlowCard.js.map +0 -1
- package/dist/planmagnet/pages/analytics/ThroughputCard.d.ts.map +0 -1
- package/dist/planmagnet/pages/analytics/ThroughputCard.js.map +0 -1
- package/dist/planmagnet/pages/analytics/WorkBreakdownCard.d.ts.map +0 -1
- package/dist/planmagnet/pages/analytics/WorkBreakdownCard.js.map +0 -1
- package/dist/planmagnet/pages/analytics/analyticsRange.d.ts.map +0 -1
- package/dist/planmagnet/pages/analytics/analyticsRange.js.map +0 -1
- package/dist/planmagnet/people/People.d.ts.map +0 -1
- package/dist/planmagnet/people/People.js.map +0 -1
- package/dist/planmagnet/presence/PresenceAvatars.d.ts.map +0 -1
- package/dist/planmagnet/presence/PresenceAvatars.js.map +0 -1
- package/dist/planmagnet/product/FeatureLinkPanels.d.ts.map +0 -1
- package/dist/planmagnet/product/FeatureLinkPanels.js.map +0 -1
- package/dist/planmagnet/product/ProductControls.d.ts.map +0 -1
- package/dist/planmagnet/product/ProductControls.js.map +0 -1
- package/dist/planmagnet/product/ProductFeatureControls.d.ts.map +0 -1
- package/dist/planmagnet/product/ProductFeatureControls.js.map +0 -1
- package/dist/planmagnet/product/ProductFeatureLinkCard.d.ts.map +0 -1
- package/dist/planmagnet/product/ProductFeatureLinkCard.js.map +0 -1
- package/dist/planmagnet/product/ProductLineControls.d.ts.map +0 -1
- package/dist/planmagnet/product/ProductLineControls.js.map +0 -1
- package/dist/planmagnet/product/ProductTeamsPanel.d.ts.map +0 -1
- package/dist/planmagnet/product/ProductTeamsPanel.js.map +0 -1
- package/dist/planmagnet/product/WorkItemProductFeatureChip.d.ts.map +0 -1
- package/dist/planmagnet/product/WorkItemProductFeatureChip.js.map +0 -1
- package/dist/planmagnet/product/hierarchy.d.ts.map +0 -1
- package/dist/planmagnet/product/hierarchy.js.map +0 -1
- package/dist/planmagnet/product/hierarchyOperations.d.ts.map +0 -1
- package/dist/planmagnet/product/hierarchyOperations.js.map +0 -1
- package/dist/planmagnet/product/refusal.d.ts.map +0 -1
- package/dist/planmagnet/product/refusal.js.map +0 -1
- package/dist/planmagnet/product/routes.d.ts.map +0 -1
- package/dist/planmagnet/product/routes.js.map +0 -1
- package/dist/planmagnet/providers/PlanMagnetProvider.d.ts.map +0 -1
- package/dist/planmagnet/providers/PlanMagnetProvider.js.map +0 -1
- package/dist/planmagnet/releases/ReleaseChecklistCard.d.ts.map +0 -1
- package/dist/planmagnet/releases/ReleaseChecklistCard.js.map +0 -1
- package/dist/planmagnet/releases/ReleaseGatesCard.d.ts.map +0 -1
- package/dist/planmagnet/releases/ReleaseGatesCard.js.map +0 -1
- package/dist/planmagnet/releases/ReleaseNotesCard.d.ts.map +0 -1
- package/dist/planmagnet/releases/ReleaseNotesCard.js.map +0 -1
- package/dist/planmagnet/releases/ReleaseReadinessCard.d.ts.map +0 -1
- package/dist/planmagnet/releases/ReleaseReadinessCard.js.map +0 -1
- package/dist/planmagnet/releases/ReleaseWorkItemsCard.d.ts.map +0 -1
- package/dist/planmagnet/releases/ReleaseWorkItemsCard.js.map +0 -1
- package/dist/planmagnet/releases/useReleaseOptions.d.ts.map +0 -1
- package/dist/planmagnet/releases/useReleaseOptions.js.map +0 -1
- package/dist/planmagnet/reports/ExportMenu.d.ts.map +0 -1
- package/dist/planmagnet/reports/ExportMenu.js.map +0 -1
- package/dist/planmagnet/reports/PrintReportView.d.ts.map +0 -1
- package/dist/planmagnet/reports/PrintReportView.js.map +0 -1
- package/dist/planmagnet/reports/ReportBuilderCanvas.d.ts.map +0 -1
- package/dist/planmagnet/reports/ReportBuilderCanvas.js.map +0 -1
- package/dist/planmagnet/reports/ReportBuilderPage.d.ts.map +0 -1
- package/dist/planmagnet/reports/ReportBuilderPage.js.map +0 -1
- package/dist/planmagnet/reports/ReportRunHistory.d.ts.map +0 -1
- package/dist/planmagnet/reports/ReportRunHistory.js.map +0 -1
- package/dist/planmagnet/reports/ReportWidgetRenderer.d.ts.map +0 -1
- package/dist/planmagnet/reports/ReportWidgetRenderer.js.map +0 -1
- package/dist/planmagnet/reports/SchedulesPanel.d.ts.map +0 -1
- package/dist/planmagnet/reports/SchedulesPanel.js.map +0 -1
- package/dist/planmagnet/reports/ShareDialog.d.ts.map +0 -1
- package/dist/planmagnet/reports/ShareDialog.js.map +0 -1
- package/dist/planmagnet/reports/SharedReportPage.d.ts.map +0 -1
- package/dist/planmagnet/reports/SharedReportPage.js.map +0 -1
- package/dist/planmagnet/reports/WidgetEditorDialog.d.ts.map +0 -1
- package/dist/planmagnet/reports/WidgetEditorDialog.js.map +0 -1
- package/dist/planmagnet/reports/reportExportPptx.d.ts.map +0 -1
- package/dist/planmagnet/reports/reportExportPptx.js.map +0 -1
- package/dist/planmagnet/reports/reportExportXlsx.d.ts.map +0 -1
- package/dist/planmagnet/reports/reportExportXlsx.js.map +0 -1
- package/dist/planmagnet/reports/reportGraphql.d.ts.map +0 -1
- package/dist/planmagnet/reports/reportGraphql.js.map +0 -1
- package/dist/planmagnet/reports/reportModel.d.ts.map +0 -1
- package/dist/planmagnet/reports/reportModel.js.map +0 -1
- package/dist/planmagnet/reports/sharedReportRoute.d.ts.map +0 -1
- package/dist/planmagnet/reports/sharedReportRoute.js.map +0 -1
- package/dist/planmagnet/roadmaps/FeatureInitiativeCard.d.ts.map +0 -1
- package/dist/planmagnet/roadmaps/FeatureInitiativeCard.js.map +0 -1
- package/dist/planmagnet/roadmaps/RoadmapControls.d.ts.map +0 -1
- package/dist/planmagnet/roadmaps/RoadmapControls.js.map +0 -1
- package/dist/planmagnet/roadmaps/RoadmapNowNextLater.d.ts.map +0 -1
- package/dist/planmagnet/roadmaps/RoadmapNowNextLater.js.map +0 -1
- package/dist/planmagnet/roadmaps/RoadmapPresentation.d.ts.map +0 -1
- package/dist/planmagnet/roadmaps/RoadmapPresentation.js.map +0 -1
- package/dist/planmagnet/roadmaps/RoadmapReviewPanel.d.ts.map +0 -1
- package/dist/planmagnet/roadmaps/RoadmapReviewPanel.js.map +0 -1
- package/dist/planmagnet/roadmaps/RoadmapVersionsPanel.d.ts.map +0 -1
- package/dist/planmagnet/roadmaps/RoadmapVersionsPanel.js.map +0 -1
- package/dist/planmagnet/roadmaps/planningFocus.d.ts.map +0 -1
- package/dist/planmagnet/roadmaps/planningFocus.js.map +0 -1
- package/dist/planmagnet/satisfaction/DeliverySatisfactionSection.d.ts.map +0 -1
- package/dist/planmagnet/satisfaction/DeliverySatisfactionSection.js.map +0 -1
- package/dist/planmagnet/satisfaction/SatisfactionFigures.d.ts.map +0 -1
- package/dist/planmagnet/satisfaction/SatisfactionFigures.js.map +0 -1
- package/dist/planmagnet/satisfaction/SatisfactionImportDialog.d.ts.map +0 -1
- package/dist/planmagnet/satisfaction/SatisfactionImportDialog.js.map +0 -1
- package/dist/planmagnet/satisfaction/SatisfactionLinkFields.d.ts.map +0 -1
- package/dist/planmagnet/satisfaction/SatisfactionLinkFields.js.map +0 -1
- package/dist/planmagnet/satisfaction/SatisfactionReleaseSelect.d.ts.map +0 -1
- package/dist/planmagnet/satisfaction/SatisfactionReleaseSelect.js.map +0 -1
- package/dist/planmagnet/satisfaction/SatisfactionResponseDialog.d.ts.map +0 -1
- package/dist/planmagnet/satisfaction/SatisfactionResponseDialog.js.map +0 -1
- package/dist/planmagnet/satisfaction/SatisfactionResponsesTable.d.ts.map +0 -1
- package/dist/planmagnet/satisfaction/SatisfactionResponsesTable.js.map +0 -1
- package/dist/planmagnet/satisfaction/SatisfactionSummaryCard.d.ts.map +0 -1
- package/dist/planmagnet/satisfaction/SatisfactionSummaryCard.js.map +0 -1
- package/dist/planmagnet/satisfaction/SatisfactionWindowPicker.d.ts.map +0 -1
- package/dist/planmagnet/satisfaction/SatisfactionWindowPicker.js.map +0 -1
- package/dist/planmagnet/satisfaction/satisfaction.d.ts.map +0 -1
- package/dist/planmagnet/satisfaction/satisfaction.js.map +0 -1
- package/dist/planmagnet/satisfaction/satisfactionCsv.d.ts.map +0 -1
- package/dist/planmagnet/satisfaction/satisfactionCsv.js.map +0 -1
- package/dist/planmagnet/satisfaction/satisfactionForm.d.ts.map +0 -1
- package/dist/planmagnet/satisfaction/satisfactionForm.js.map +0 -1
- package/dist/planmagnet/satisfaction/satisfactionOperations.d.ts.map +0 -1
- package/dist/planmagnet/satisfaction/satisfactionOperations.js.map +0 -1
- package/dist/planmagnet/satisfaction/useSatisfactionAccess.d.ts.map +0 -1
- package/dist/planmagnet/satisfaction/useSatisfactionAccess.js.map +0 -1
- package/dist/planmagnet/skills/RequiredSkillsEditor.d.ts.map +0 -1
- package/dist/planmagnet/skills/RequiredSkillsEditor.js.map +0 -1
- package/dist/planmagnet/skills/SkillChips.d.ts.map +0 -1
- package/dist/planmagnet/skills/SkillChips.js.map +0 -1
- package/dist/planmagnet/skills/SkillCoverageCard.d.ts.map +0 -1
- package/dist/planmagnet/skills/SkillCoverageCard.js.map +0 -1
- package/dist/planmagnet/skills/WorkItemRequiredSkills.d.ts.map +0 -1
- package/dist/planmagnet/skills/WorkItemRequiredSkills.js.map +0 -1
- package/dist/planmagnet/skills/skillOperations.d.ts.map +0 -1
- package/dist/planmagnet/skills/skillOperations.js.map +0 -1
- package/dist/planmagnet/skills/skillTags.d.ts.map +0 -1
- package/dist/planmagnet/skills/skillTags.js.map +0 -1
- package/dist/planmagnet/skills/useRequiredSkillsDraft.d.ts.map +0 -1
- package/dist/planmagnet/skills/useRequiredSkillsDraft.js.map +0 -1
- package/dist/planmagnet/sprints/SprintControls.d.ts.map +0 -1
- package/dist/planmagnet/sprints/SprintControls.js.map +0 -1
- package/dist/planmagnet/sprints/SprintDates.d.ts.map +0 -1
- package/dist/planmagnet/sprints/SprintDates.js.map +0 -1
- package/dist/planmagnet/store/planmagnetStore.d.ts.map +0 -1
- package/dist/planmagnet/store/planmagnetStore.js.map +0 -1
- package/dist/planmagnet/team/PendingInvitations.d.ts.map +0 -1
- package/dist/planmagnet/team/PendingInvitations.js.map +0 -1
- package/dist/planmagnet/team/TeamControls.d.ts.map +0 -1
- package/dist/planmagnet/team/TeamControls.js.map +0 -1
- package/dist/planmagnet/team/UnmatchedCrewIdentities.d.ts.map +0 -1
- package/dist/planmagnet/team/UnmatchedCrewIdentities.js.map +0 -1
- package/dist/planmagnet/team/invitationEmail.d.ts.map +0 -1
- package/dist/planmagnet/team/invitationEmail.js.map +0 -1
- package/dist/planmagnet/time/TaskTimePanel.d.ts.map +0 -1
- package/dist/planmagnet/time/TaskTimePanel.js.map +0 -1
- package/dist/planmagnet/time/TimeEntryControls.d.ts.map +0 -1
- package/dist/planmagnet/time/TimeEntryControls.js.map +0 -1
- package/dist/planmagnet/time/TimesheetControls.d.ts.map +0 -1
- package/dist/planmagnet/time/TimesheetControls.js.map +0 -1
- package/dist/planmagnet/time/timeShared.d.ts.map +0 -1
- package/dist/planmagnet/time/timeShared.js.map +0 -1
- package/dist/planmagnet/types/index.d.ts.map +0 -1
- package/dist/planmagnet/utils/cn.d.ts.map +0 -1
- package/dist/planmagnet/utils/cn.js.map +0 -1
- package/dist/planmagnet/utils/email.d.ts.map +0 -1
- package/dist/planmagnet/utils/email.js.map +0 -1
- package/dist/planmagnet/utils/formValidation.d.ts.map +0 -1
- package/dist/planmagnet/utils/formValidation.js.map +0 -1
- package/dist/planmagnet/utils/graphqlErrors.d.ts.map +0 -1
- package/dist/planmagnet/utils/graphqlErrors.js.map +0 -1
- package/dist/planmagnet/utils/lineDiff.d.ts.map +0 -1
- package/dist/planmagnet/utils/lineDiff.js.map +0 -1
- package/dist/planmagnet/utils/mutationResult.d.ts.map +0 -1
- package/dist/planmagnet/utils/mutationResult.js.map +0 -1
- package/dist/planmagnet/utils/navigation.d.ts.map +0 -1
- package/dist/planmagnet/utils/navigation.js.map +0 -1
- package/dist/planmagnet/utils/qualityGateCriteria.d.ts.map +0 -1
- package/dist/planmagnet/utils/qualityGateCriteria.js.map +0 -1
- package/dist/planmagnet/utils/rowNavigation.d.ts.map +0 -1
- package/dist/planmagnet/utils/rowNavigation.js.map +0 -1
- package/dist/planmagnet/utils/statusColor.d.ts.map +0 -1
- package/dist/planmagnet/utils/statusColor.js.map +0 -1
- package/dist/planmagnet/utils/urlParam.d.ts.map +0 -1
- package/dist/planmagnet/utils/urlParam.js.map +0 -1
- package/dist/planmagnet/webhooks/webhookTypes.d.ts.map +0 -1
- package/dist/planmagnet/webhooks/webhookTypes.js.map +0 -1
- package/dist/shared/hooks/useTr.d.ts.map +0 -1
- package/dist/shared/hooks/useTr.js.map +0 -1
- package/dist/shared/utils/i18n.d.ts.map +0 -1
- package/dist/shared/utils/i18n.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MetricsCard.js","names":[],"sources":["../../../../src/planmagnet/pages/analytics/MetricsCard.tsx"],"sourcesContent":["import { gql } from '@apollo/client';\nimport { useQuery } from '@apollo/client/react';\nimport { Card, CardContent, CardHeader, CardTitle } from '@burdenoff/fe-libs/ui';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { Activity, Info } from 'lucide-react';\nimport { formatDuration, StatTile } from './DeliveryHealthCards';\n\n/**\n * ANR-18 / ANR-19: the generic Metric/Analytics framework. `planmagnetMetrics` (workspace-wide) and\n * `planmagnetAnalytics.projectMetrics`/`.teamMetrics` (one project) are both a THIN composition over the\n * narrow analytics queries the rest of this page already renders (velocity, cycle time, throughput,\n * cumulative flow, delivery KPIs) into one generic `{category, value, unit, trend, target}` row shape — never\n * a second computation engine. Both are TTL-cached (60s) server-side (see analytics.gql's own doc comment),\n * so a reading here can be up to a minute stale — said plainly below rather than implied as live.\n * `trend`/`target` are only ever rendered when the server actually sets them: no metric sets them today (see\n * PlanmagnetMetric's own field doc), so they never show as a fabricated value.\n */\n\nconst GET_WORKSPACE_METRICS = gql`\n query GetWorkspaceMetrics($workspaceId: ID!, $timeRange: PlanmagnetTimeRangeInput) {\n planmagnetMetrics(workspaceId: $workspaceId, timeRange: $timeRange) {\n category\n value\n unit\n trend\n target\n calculatedAt\n }\n }\n`;\n\nconst GET_PROJECT_ANALYTICS_METRICS = gql`\n query GetProjectAnalyticsMetrics(\n $workspaceId: ID!\n $projectId: ID\n $timeRange: PlanmagnetTimeRangeInput\n ) {\n planmagnetAnalytics(workspaceId: $workspaceId, projectId: $projectId, timeRange: $timeRange) {\n projectMetrics {\n category\n value\n unit\n trend\n target\n calculatedAt\n }\n teamMetrics {\n category\n value\n unit\n trend\n target\n calculatedAt\n }\n }\n }\n`;\n\ninterface MetricRow {\n category: string;\n value: number;\n unit: string;\n trend: number | null;\n target: number | null;\n calculatedAt: string;\n}\n\ninterface WorkspaceMetricsData {\n planmagnetMetrics: MetricRow[];\n}\n\ninterface ProjectAnalyticsData {\n planmagnetAnalytics: {\n projectMetrics: MetricRow[];\n teamMetrics: MetricRow[];\n };\n}\n\n// Every category AnalyticsService.metrics()/composeProjectMetrics()/composeTeamMetrics() can actually emit\n// today (see wspace-planmagnet-svc analytics.service.ts) — kept as a lookup, not re-derived, so a category the\n// server adds later still renders (falls back to itself) instead of disappearing.\nconst METRIC_LABELS: Record<string, string> = {\n sprintOnTimeRate: 'Sprint on-time rate',\n releaseOnTimeRate: 'Release on-time rate',\n milestoneOnTimeRate: 'Milestone on-time rate',\n scopeAdherenceRate: 'Scope adherence rate',\n velocity: 'Velocity',\n throughput: 'Throughput',\n cycleTime: 'Cycle time',\n wip: 'Work in progress',\n sprintRemainingPoints: 'Sprint remaining points',\n teamVelocity: 'Team velocity',\n};\n\nfunction metricLabel(category: string): string {\n return METRIC_LABELS[category] ?? category;\n}\n\nfunction formatMetricValue(m: MetricRow): string {\n if (m.unit === '%') return `${Math.round(m.value)}%`;\n if (m.unit === 'hours') return formatDuration(m.value);\n const rounded = Math.round(m.value * 100) / 100;\n return `${rounded} ${m.unit}`;\n}\n\nfunction MetricTile({ metric }: { metric: MetricRow }) {\n const hints: string[] = [];\n // Neither is set by the server today (see the module doc above) — kept so a future source for either shows\n // up here with no UI change needed.\n if (metric.trend != null) hints.push(`Trend ${metric.trend > 0 ? '+' : ''}${metric.trend}`);\n if (metric.target != null) {\n hints.push(`Target ${metric.target}${metric.unit === '%' ? '%' : ` ${metric.unit}`}`);\n }\n return (\n <StatTile\n label={metricLabel(metric.category)}\n value={formatMetricValue(metric)}\n hint={hints.length > 0 ? hints.join(' · ') : undefined}\n />\n );\n}\n\nexport function MetricsSection({\n workspaceId,\n projectId,\n startDate,\n endDate,\n}: {\n workspaceId?: string | null;\n /** Omitted = no project selected (ANR-09 scope set to \"All projects\") — nothing project-scoped to show. */\n projectId?: string;\n startDate: string;\n endDate: string;\n}) {\n const { t } = useI18n();\n const timeRange = { startDate, endDate };\n const { data, loading, error } = useQuery<WorkspaceMetricsData>(GET_WORKSPACE_METRICS, {\n variables: { workspaceId, timeRange },\n skip: !workspaceId,\n });\n const {\n data: projectData,\n loading: projectLoading,\n error: projectError,\n } = useQuery<ProjectAnalyticsData>(GET_PROJECT_ANALYTICS_METRICS, {\n variables: { workspaceId, projectId, timeRange },\n skip: !workspaceId || !projectId,\n });\n\n const metrics = data?.planmagnetMetrics ?? [];\n const projectMetrics = projectData?.planmagnetAnalytics.projectMetrics ?? [];\n const teamMetrics = projectData?.planmagnetAnalytics.teamMetrics ?? [];\n const projectRows = [...projectMetrics, ...teamMetrics];\n\n return (\n <Card data-testid=\"metrics-card\">\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Activity className=\"h-4 w-4\" />\n {t('planmagnet.analytics.metrics.title', 'Metrics')}\n </CardTitle>\n <p className=\"text-xs text-muted-foreground\">\n {t(\n 'planmagnet.analytics.metrics.subtitle',\n \"Workspace-wide KPIs, plus the selected project's own metrics, composed from the queries above into one generic shape.\"\n )}\n </p>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div>\n <h3 className=\"text-sm font-medium mb-1\">\n {t('planmagnet.analytics.metrics.workspaceTitle', 'Workspace')}\n </h3>\n {loading ? (\n <p className=\"text-sm text-muted-foreground\">\n {t('planmagnet.analytics.loading', 'Loading…')}\n </p>\n ) : error ? (\n <p className=\"text-sm text-status-error-text\">\n {t('planmagnet.analytics.metrics.error', 'Metrics could not be loaded')}:{' '}\n {error.message}\n </p>\n ) : metrics.length === 0 ? (\n <p className=\"text-sm text-muted-foreground py-2\">\n {t(\n 'planmagnet.analytics.metrics.workspaceEmpty',\n 'Nothing to show in this range yet.'\n )}\n </p>\n ) : (\n <div\n className=\"grid grid-cols-2 gap-3 sm:grid-cols-4\"\n data-testid=\"metrics-workspace-tiles\"\n >\n {metrics.map((m) => (\n <MetricTile key={m.category} metric={m} />\n ))}\n </div>\n )}\n </div>\n\n <div className=\"border-t pt-3\">\n <h3 className=\"text-sm font-medium mb-1\">\n {t('planmagnet.analytics.metrics.projectTitle', 'Selected project')}\n </h3>\n {!projectId ? (\n <p className=\"text-sm text-muted-foreground py-2\">\n {t(\n 'planmagnet.analytics.metrics.noProject',\n 'Pick a project above to see its own metrics.'\n )}\n </p>\n ) : projectLoading ? (\n <p className=\"text-sm text-muted-foreground\">\n {t('planmagnet.analytics.loading', 'Loading…')}\n </p>\n ) : projectError ? (\n <p className=\"text-sm text-status-error-text\">\n {t(\n 'planmagnet.analytics.metrics.projectError',\n 'Project metrics could not be loaded'\n )}\n : {projectError.message}\n </p>\n ) : projectRows.length === 0 ? (\n <p className=\"text-sm text-muted-foreground py-2\">\n {t(\n 'planmagnet.analytics.metrics.projectEmpty',\n 'Nothing to show for this project in this range yet.'\n )}\n </p>\n ) : (\n <div\n className=\"grid grid-cols-2 gap-3 sm:grid-cols-4\"\n data-testid=\"metrics-project-tiles\"\n >\n {projectRows.map((m) => (\n <MetricTile key={m.category} metric={m} />\n ))}\n </div>\n )}\n </div>\n\n <p\n className=\"flex items-start gap-1.5 text-xs text-muted-foreground border-t pt-2\"\n data-testid=\"metrics-cache-note\"\n >\n <Info className=\"h-3.5 w-3.5 shrink-0 mt-0.5\" aria-hidden={true} />\n {t(\n 'planmagnet.analytics.metrics.cacheNote',\n 'Updated within the last minute — these metrics are cached for 60 seconds.'\n )}\n </p>\n </CardContent>\n </Card>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"QualityMetricsCard.d.ts","sourceRoot":"","sources":["../../../../src/planmagnet/pages/analytics/QualityMetricsCard.tsx"],"names":[],"mappings":"AAmFA,wBAAgB,kBAAkB,CAAC,EACjC,WAAW,EACX,SAAS,EACT,SAAS,EACT,OAAO,GACR,EAAE;IACD,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,6FAA6F;IAC7F,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB,2CA2JA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"QualityMetricsCard.js","names":[],"sources":["../../../../src/planmagnet/pages/analytics/QualityMetricsCard.tsx"],"sourcesContent":["import { gql } from '@apollo/client';\nimport { useQuery } from '@apollo/client/react';\nimport { Card, CardContent, CardHeader, CardTitle } from '@burdenoff/fe-libs/ui';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { Bug } from 'lucide-react';\nimport {\n Bar,\n BarChart,\n CartesianGrid,\n Cell,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from 'recharts';\nimport { enumLabel } from '../../controls/WorkItemControls';\nimport { StatTile, formatDuration } from './DeliveryHealthCards';\n\n/**\n * ANR-20: quality / defect metrics for the workspace or one project, over the page's date range. Every figure\n * comes straight from `planmagnetQualityMetrics` (see graphql/wspace.graphql for the exact server semantics) —\n * nothing here re-derives a rate the server already computed, and every rate the server can hand back `null`\n * (nothing to divide by) renders \"—\" with the reason, never a fabricated 0%.\n */\n\nconst GET_QUALITY_METRICS = gql`\n query GetAnalyticsQualityMetrics(\n $workspaceId: ID!\n $projectId: ID\n $startDate: DateTime\n $endDate: DateTime\n ) {\n planmagnetQualityMetrics(\n workspaceId: $workspaceId\n projectId: $projectId\n startDate: $startDate\n endDate: $endDate\n ) {\n bugsOpened\n bugsResolved\n openBugs\n openBugsByPriority {\n priority\n count\n }\n defectRatio\n meanTimeToResolveHours\n qualityGatesReviewed\n qualityGatesPassed\n gatePassRate\n }\n }\n`;\n\ninterface QualityMetricsData {\n planmagnetQualityMetrics: {\n bugsOpened: number;\n bugsResolved: number;\n openBugs: number;\n openBugsByPriority: Array<{ priority: string; count: number }>;\n defectRatio: number | null;\n meanTimeToResolveHours: number | null;\n qualityGatesReviewed: number;\n qualityGatesPassed: number;\n gatePassRate: number | null;\n };\n}\n\n// Fixed severity order — never re-derived from whichever priorities happen to appear (same rule\n// utils/statusColor.ts documents for status colors: a categorical/ordinal dimension keeps one fixed order).\nconst PRIORITY_ORDER = ['CRITICAL', 'HIGH', 'MEDIUM', 'LOW', 'NONE'] as const;\n// recharts' `fill` prop is a literal SVG paint attribute, not a Tailwind className, so it reads the fe-libs chart\n// token ramp through a CSS var rather than a `fill-chart-N` utility class (same constraint the page-level charts\n// document; this card additionally maps severity to var(--color-status-*) for the two worst priorities, since\n// \"priority\" IS the severity dimension here, not an arbitrary identity one).\nconst PRIORITY_COLOR: Record<(typeof PRIORITY_ORDER)[number], string> = {\n CRITICAL: 'var(--color-status-error-bg)',\n HIGH: 'var(--color-status-warning-bg)',\n MEDIUM: 'var(--color-chart-1)',\n LOW: 'var(--color-chart-6)',\n NONE: 'var(--color-chart-axis)',\n};\n\nexport function QualityMetricsCard({\n workspaceId,\n projectId,\n startDate,\n endDate,\n}: {\n workspaceId?: string | null;\n /** Omitted = every project in the workspace (ANR-09 project scope set to \"All projects\"). */\n projectId?: string;\n startDate: string;\n endDate: string;\n}) {\n const { t } = useI18n();\n const { data, loading, error } = useQuery<QualityMetricsData>(GET_QUALITY_METRICS, {\n variables: { workspaceId, projectId, startDate, endDate },\n skip: !workspaceId,\n });\n const q = data?.planmagnetQualityMetrics;\n\n const byPriority = new Map(q?.openBugsByPriority.map((p) => [p.priority, p.count]) ?? []);\n const priorityChartData = PRIORITY_ORDER.filter((p) => (byPriority.get(p) ?? 0) > 0).map((p) => ({\n priority: enumLabel(p),\n count: byPriority.get(p) ?? 0,\n fill: PRIORITY_COLOR[p],\n }));\n\n return (\n <Card data-testid=\"quality-card\">\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Bug className=\"h-4 w-4\" />\n {t('planmagnet.analytics.quality.title', 'Quality')}\n </CardTitle>\n <p className=\"text-xs text-muted-foreground\">\n {projectId\n ? t(\n 'planmagnet.analytics.quality.subtitleProject',\n 'Bug and quality-gate activity for the selected project, in the selected range.'\n )\n : t(\n 'planmagnet.analytics.quality.subtitle',\n 'Bug and quality-gate activity across the workspace, in the selected range.'\n )}\n </p>\n </CardHeader>\n <CardContent>\n {loading ? (\n <p className=\"text-sm text-muted-foreground\">\n {t('planmagnet.analytics.loading', 'Loading…')}\n </p>\n ) : error ? (\n <p className=\"text-sm text-status-error-text\">\n {t('planmagnet.analytics.quality.error', 'Quality metrics could not be loaded')}:{' '}\n {error.message}\n </p>\n ) : !q ? null : (\n <div className=\"space-y-4\">\n <div className=\"grid grid-cols-2 gap-3 sm:grid-cols-3\">\n <StatTile\n label={t('planmagnet.analytics.quality.bugsOpened', 'Bugs opened')}\n value={String(q.bugsOpened)}\n hint={t(\n 'planmagnet.analytics.quality.bugsOpenedHint',\n 'BUG items created in the range'\n )}\n />\n <StatTile\n label={t('planmagnet.analytics.quality.bugsResolved', 'Bugs resolved')}\n value={String(q.bugsResolved)}\n hint={t(\n 'planmagnet.analytics.quality.bugsResolvedHint',\n 'BUG items that reached Done in the range'\n )}\n />\n <StatTile\n label={t('planmagnet.analytics.quality.openBugs', 'Open bugs (now)')}\n value={String(q.openBugs)}\n hint={t(\n 'planmagnet.analytics.quality.openBugsHint',\n 'Not Done or Cancelled, as of now — not range-bound'\n )}\n />\n <StatTile\n label={t('planmagnet.analytics.quality.defectRatio', 'Defect ratio')}\n value={q.defectRatio === null ? '—' : q.defectRatio.toFixed(2)}\n hint={\n q.defectRatio === null\n ? t(\n 'planmagnet.analytics.quality.defectRatioHintEmpty',\n 'No non-bug work completed in this range to compare against'\n )\n : t(\n 'planmagnet.analytics.quality.defectRatioHint',\n 'Bugs opened ÷ non-bug items completed, in range'\n )\n }\n />\n <StatTile\n label={t('planmagnet.analytics.quality.mttr', 'Mean time to resolve')}\n value={formatDuration(q.meanTimeToResolveHours)}\n hint={t(\n 'planmagnet.analytics.quality.mttrHint',\n 'Bug creation to Done, averaged over bugs resolved in range'\n )}\n />\n <StatTile\n label={t('planmagnet.analytics.quality.gatePassRate', 'Gate pass rate')}\n value={q.gatePassRate === null ? '—' : `${Math.round(q.gatePassRate * 100)}%`}\n hint={\n q.gatePassRate === null\n ? t(\n 'planmagnet.analytics.quality.gatePassRateHintEmpty',\n 'No quality gate was reviewed in this range'\n )\n : t(\n 'planmagnet.analytics.quality.gatePassRateHint',\n '{{passed}} of {{reviewed}} gates reviewed in range passed',\n { passed: q.qualityGatesPassed, reviewed: q.qualityGatesReviewed }\n )\n }\n />\n </div>\n\n <div>\n <h3 className=\"text-sm font-medium mb-1\">\n {t('planmagnet.analytics.quality.openByPriority', 'Open bugs by priority')}\n </h3>\n {priorityChartData.length === 0 ? (\n <p className=\"text-sm text-muted-foreground py-4 text-center\">\n {t('planmagnet.analytics.quality.openByPriorityEmpty', 'No open bugs right now.')}\n </p>\n ) : (\n <>\n {/* Accessible text restatement of the chart, for screen readers and at-a-glance scanning. */}\n <p className=\"text-xs text-muted-foreground mb-2\">\n {priorityChartData.map((p) => `${p.priority}: ${p.count}`).join(' · ')}\n </p>\n <ResponsiveContainer width=\"100%\" height={160}>\n <BarChart data={priorityChartData} layout=\"vertical\">\n <CartesianGrid strokeDasharray=\"3 3\" opacity={0.2} horizontal={false} />\n <XAxis type=\"number\" tick={{ fontSize: 11 }} allowDecimals={false} />\n <YAxis\n type=\"category\"\n dataKey=\"priority\"\n tick={{ fontSize: 11 }}\n width={70}\n />\n <Tooltip />\n <Bar\n dataKey=\"count\"\n name={t('planmagnet.analytics.quality.openBugs', 'Open bugs (now)')}\n >\n {priorityChartData.map((p) => (\n <Cell key={p.priority} fill={p.fill} />\n ))}\n </Bar>\n </BarChart>\n </ResponsiveContainer>\n </>\n )}\n </div>\n </div>\n )}\n </CardContent>\n </Card>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAyBA,IAAM,IAAsB,CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CzB,IAAiB;CAAC;CAAY;CAAQ;CAAU;CAAO;CAAO,EAK9D,IAAkE;CACtE,UAAU;CACV,MAAM;CACN,QAAQ;CACR,KAAK;CACL,MAAM;CACP;AAED,SAAgB,EAAmB,EACjC,gBACA,cACA,cACA,cAOC;CACD,IAAM,EAAE,SAAM,GAAS,EACjB,EAAE,SAAM,YAAS,aAAU,EAA6B,GAAqB;EACjF,WAAW;GAAE;GAAa;GAAW;GAAW;GAAS;EACzD,MAAM,CAAC;EACR,CAAC,EACI,IAAI,GAAM,0BAEV,IAAa,IAAI,IAAI,GAAG,mBAAmB,KAAK,MAAM,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,EACnF,IAAoB,EAAe,QAAQ,OAAO,EAAW,IAAI,EAAE,IAAI,KAAK,EAAE,CAAC,KAAK,OAAO;EAC/F,UAAU,EAAU,EAAE;EACtB,OAAO,EAAW,IAAI,EAAE,IAAI;EAC5B,MAAM,EAAe;EACtB,EAAE;AAEH,QACE,kBAAC,GAAD;EAAM,eAAY;YAAlB,CACE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD;GAAW,WAAU;aAArB,CACE,kBAAC,GAAD,EAAK,WAAU,WAAY,CAAA,EAC1B,EAAE,sCAAsC,UAAU,CACzC;MACZ,kBAAC,KAAD;GAAG,WAAU;aACV,IACG,EACE,gDACA,iFACD,GACD,EACE,yCACA,6EACD;GACH,CAAA,CACO,EAAA,CAAA,EACb,kBAAC,GAAD,EAAA,UACG,IACC,kBAAC,KAAD;GAAG,WAAU;aACV,EAAE,gCAAgC,WAAW;GAC5C,CAAA,GACF,IACF,kBAAC,KAAD;GAAG,WAAU;aAAb;IACG,EAAE,sCAAsC,sCAAsC;IAAC;IAAE;IACjF,EAAM;IACL;OACD,IACH,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,OAAD;IAAK,WAAU;cAAf;KACE,kBAAC,GAAD;MACE,OAAO,EAAE,2CAA2C,cAAc;MAClE,OAAO,OAAO,EAAE,WAAW;MAC3B,MAAM,EACJ,+CACA,iCACD;MACD,CAAA;KACF,kBAAC,GAAD;MACE,OAAO,EAAE,6CAA6C,gBAAgB;MACtE,OAAO,OAAO,EAAE,aAAa;MAC7B,MAAM,EACJ,iDACA,2CACD;MACD,CAAA;KACF,kBAAC,GAAD;MACE,OAAO,EAAE,yCAAyC,kBAAkB;MACpE,OAAO,OAAO,EAAE,SAAS;MACzB,MAAM,EACJ,6CACA,qDACD;MACD,CAAA;KACF,kBAAC,GAAD;MACE,OAAO,EAAE,4CAA4C,eAAe;MACpE,OAAO,EAAE,gBAAgB,OAAO,MAAM,EAAE,YAAY,QAAQ,EAAE;MAC9D,MACE,EAAE,gBAAgB,OACd,EACE,qDACA,6DACD,GACD,EACE,gDACA,kDACD;MAEP,CAAA;KACF,kBAAC,GAAD;MACE,OAAO,EAAE,qCAAqC,uBAAuB;MACrE,OAAO,EAAe,EAAE,uBAAuB;MAC/C,MAAM,EACJ,yCACA,6DACD;MACD,CAAA;KACF,kBAAC,GAAD;MACE,OAAO,EAAE,6CAA6C,iBAAiB;MACvE,OAAO,EAAE,iBAAiB,OAAO,MAAM,GAAG,KAAK,MAAM,EAAE,eAAe,IAAI,CAAC;MAC3E,MACE,EAAE,iBAAiB,OACf,EACE,sDACA,6CACD,GACD,EACE,iDACA,6DACA;OAAE,QAAQ,EAAE;OAAoB,UAAU,EAAE;OAAsB,CACnE;MAEP,CAAA;KACE;OAEN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;IAAI,WAAU;cACX,EAAE,+CAA+C,wBAAwB;IACvE,CAAA,EACJ,EAAkB,WAAW,IAC5B,kBAAC,KAAD;IAAG,WAAU;cACV,EAAE,oDAAoD,0BAA0B;IAC/E,CAAA,GAEJ,kBAAA,GAAA,EAAA,UAAA,CAEE,kBAAC,KAAD;IAAG,WAAU;cACV,EAAkB,KAAK,MAAM,GAAG,EAAE,SAAS,IAAI,EAAE,QAAQ,CAAC,KAAK,MAAM;IACpE,CAAA,EACJ,kBAAC,GAAD;IAAqB,OAAM;IAAO,QAAQ;cACxC,kBAAC,GAAD;KAAU,MAAM;KAAmB,QAAO;eAA1C;MACE,kBAAC,GAAD;OAAe,iBAAgB;OAAM,SAAS;OAAK,YAAY;OAAS,CAAA;MACxE,kBAAC,GAAD;OAAO,MAAK;OAAS,MAAM,EAAE,UAAU,IAAI;OAAE,eAAe;OAAS,CAAA;MACrE,kBAAC,GAAD;OACE,MAAK;OACL,SAAQ;OACR,MAAM,EAAE,UAAU,IAAI;OACtB,OAAO;OACP,CAAA;MACF,kBAAC,GAAD,EAAW,CAAA;MACX,kBAAC,GAAD;OACE,SAAQ;OACR,MAAM,EAAE,yCAAyC,kBAAkB;iBAElE,EAAkB,KAAK,MACtB,kBAAC,GAAD,EAAuB,MAAM,EAAE,MAAQ,EAA5B,EAAE,SAA0B,CACvC;OACE,CAAA;MACG;;IACS,CAAA,CACrB,EAAA,CAAA,CAED,EAAA,CAAA,CACF;OA1GC,MA4GG,CAAA,CACT"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SprintDeliveryCards.d.ts","sourceRoot":"","sources":["../../../../src/planmagnet/pages/analytics/SprintDeliveryCards.tsx"],"names":[],"mappings":"AA0GA,wBAAgB,kBAAkB,CAAC,EACjC,WAAW,EACX,QAAQ,GACT,EAAE;IACD,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;CAClB,2CA2EA;AAED,wBAAgB,kBAAkB,CAAC,EACjC,WAAW,EACX,SAAS,EACT,mBAAuB,GACxB,EAAE;IACD,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B,2CAgIA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SprintDeliveryCards.js","names":[],"sources":["../../../../src/planmagnet/pages/analytics/SprintDeliveryCards.tsx"],"sourcesContent":["import { gql } from '@apollo/client';\nimport { useQuery } from '@apollo/client/react';\nimport { Card, CardContent, CardHeader, CardTitle } from '@burdenoff/fe-libs/ui';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { BarChart3, TrendingUp } from 'lucide-react';\nimport {\n Bar,\n BarChart,\n CartesianGrid,\n Legend,\n Line,\n LineChart,\n ReferenceArea,\n ReferenceLine,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from 'recharts';\n\n/**\n * Sprint burndown and velocity, as their own cards (BOFF-4447's server-computed\n * `planmagnetSprintBurndown` / `planmagnetVelocity`). Extracted out of\n * `pages/AnalyticsAnalyticsPagePage.tsx`, where this same chart code lived inline, so the\n * role dashboards (`dashboards/project-manager-page`) can import the chart rather than\n * duplicating it — same reasoning as `CycleTimeCard`/`BudgetPerformanceCard` alongside\n * them in `DeliveryHealthCards.tsx`. Each card owns its query, so neither can land a hook\n * after an early return in the host page.\n *\n * recharts' `stroke`/`fill` render as literal SVG paint attributes, not Tailwind\n * classNames — they cannot consume semantic `bg-*`/`text-*` tokens, the same documented\n * exception `AnalyticsAnalyticsPagePage.tsx`'s cumulative-flow chart carries.\n */\n\nconst GET_SPRINT_BURNDOWN = gql`\n query DashboardSprintBurndown($workspaceId: ID!, $sprintId: ID!) {\n planmagnetSprintBurndown(workspaceId: $workspaceId, sprintId: $sprintId) {\n sprintId\n totalPoints\n totalCount\n points {\n date\n remainingPoints\n completedPoints\n }\n }\n }\n`;\n\nconst GET_VELOCITY = gql`\n query DashboardVelocity($workspaceId: ID!, $projectId: ID!, $trailingSprintCount: Int) {\n planmagnetVelocity(\n workspaceId: $workspaceId\n projectId: $projectId\n trailingSprintCount: $trailingSprintCount\n ) {\n projectId\n averageVelocity\n forecastNextSprintPoints\n forecastRange {\n p15\n p85\n }\n insufficientHistory\n sprints {\n sprintId\n sprintName\n sequenceNumber\n completedPoints\n plannedPoints\n }\n }\n }\n`;\n\ninterface BurndownData {\n planmagnetSprintBurndown: {\n sprintId: string;\n totalPoints: number;\n totalCount: number;\n points: { date: string; remainingPoints: number; completedPoints: number }[];\n } | null;\n}\n\ninterface VelocityData {\n planmagnetVelocity: {\n projectId: string;\n averageVelocity: number;\n forecastNextSprintPoints: number;\n forecastRange: { p15: number; p85: number } | null;\n insufficientHistory: boolean;\n sprints: {\n sprintId: string;\n sprintName: string;\n sequenceNumber: number;\n completedPoints: number;\n plannedPoints: number | null;\n }[];\n };\n}\n\nfunction formatDay(iso: string): string {\n const d = new Date(iso);\n return `${d.getUTCMonth() + 1}/${d.getUTCDate()}`;\n}\n\nexport function SprintBurndownCard({\n workspaceId,\n sprintId,\n}: {\n workspaceId?: string | null;\n sprintId: string;\n}) {\n const { t } = useI18n();\n const { data, loading, error } = useQuery<BurndownData>(GET_SPRINT_BURNDOWN, {\n variables: { workspaceId, sprintId },\n skip: !workspaceId || !sprintId,\n });\n const points = data?.planmagnetSprintBurndown?.points ?? [];\n const chartData = points.map((p) => ({\n day: formatDay(p.date),\n remaining: p.remainingPoints,\n completed: p.completedPoints,\n }));\n\n return (\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <BarChart3 className=\"h-4 w-4\" />\n {t('planmagnet.dashboards.burndown.title', 'Sprint burndown')}\n </CardTitle>\n <p className=\"text-xs text-muted-foreground\">\n {t(\n 'planmagnet.dashboards.burndown.subtitle',\n 'Remaining vs. completed story points, by day of the sprint.'\n )}\n </p>\n </CardHeader>\n <CardContent>\n {!sprintId ? (\n <p className=\"text-sm text-muted-foreground\">\n {t('planmagnet.dashboards.burndown.noSprint', 'No active sprint for this project.')}\n </p>\n ) : loading && !data ? (\n <p className=\"text-sm text-muted-foreground\">\n {t('planmagnet.dashboards.loading', 'Loading…')}\n </p>\n ) : error ? (\n <p className=\"text-sm text-status-error-text\">\n {t('planmagnet.dashboards.burndown.error', 'Burndown could not be loaded')}:{' '}\n {error.message}\n </p>\n ) : chartData.length === 0 ? (\n <p className=\"text-sm text-muted-foreground\">\n {t('planmagnet.dashboards.burndown.empty', 'The active sprint has no work items yet.')}\n </p>\n ) : (\n <ResponsiveContainer width=\"100%\" height={220}>\n <LineChart data={chartData}>\n <CartesianGrid strokeDasharray=\"3 3\" opacity={0.2} />\n <XAxis dataKey=\"day\" tick={{ fontSize: 11 }} />\n <YAxis tick={{ fontSize: 11 }} allowDecimals={false} />\n <Tooltip />\n <Legend wrapperStyle={{ fontSize: 12 }} />\n <Line\n type=\"monotone\"\n dataKey=\"remaining\"\n name={t('planmagnet.dashboards.burndown.remaining', 'Remaining points')}\n stroke=\"#f59e0b\"\n strokeWidth={2}\n dot={{ r: 2 }}\n />\n <Line\n type=\"monotone\"\n dataKey=\"completed\"\n name={t('planmagnet.dashboards.burndown.completed', 'Completed points')}\n stroke=\"#22c55e\"\n strokeWidth={2}\n dot={{ r: 2 }}\n />\n </LineChart>\n </ResponsiveContainer>\n )}\n </CardContent>\n </Card>\n );\n}\n\nexport function SprintVelocityCard({\n workspaceId,\n projectId,\n trailingSprintCount = 6,\n}: {\n workspaceId?: string | null;\n projectId: string;\n trailingSprintCount?: number;\n}) {\n const { t } = useI18n();\n const { data, loading, error } = useQuery<VelocityData>(GET_VELOCITY, {\n variables: { workspaceId, projectId, trailingSprintCount },\n skip: !workspaceId || !projectId,\n });\n const velocity = data?.planmagnetVelocity;\n const chartData =\n velocity?.sprints.map((s) => ({\n name: s.sprintName,\n completed: s.completedPoints,\n planned: s.plannedPoints ?? undefined,\n })) ?? [];\n const avgVelocity = velocity ? Math.round(velocity.averageVelocity) : 0;\n const forecastNextSprint = velocity ? Math.round(velocity.forecastNextSprintPoints) : 0;\n const forecastRange = velocity?.forecastRange ?? null;\n const insufficientHistory = velocity?.insufficientHistory ?? false;\n\n return (\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <TrendingUp className=\"h-4 w-4\" />\n {t('planmagnet.dashboards.velocity.title', 'Sprint velocity')}\n </CardTitle>\n <p className=\"text-xs text-muted-foreground\">\n {t(\n 'planmagnet.dashboards.velocity.subtitle',\n 'Completed story points per sprint, across the trailing {{count}} completed sprints.',\n { count: trailingSprintCount }\n )}\n </p>\n </CardHeader>\n <CardContent>\n {!projectId ? (\n <p className=\"text-sm text-muted-foreground\">\n {t('planmagnet.dashboards.velocity.noProject', 'Select a project to see its velocity.')}\n </p>\n ) : loading && !data ? (\n <p className=\"text-sm text-muted-foreground\">\n {t('planmagnet.dashboards.loading', 'Loading…')}\n </p>\n ) : error ? (\n <p className=\"text-sm text-status-error-text\">\n {t('planmagnet.dashboards.velocity.error', 'Velocity could not be loaded')}:{' '}\n {error.message}\n </p>\n ) : chartData.length === 0 ? (\n <p className=\"text-sm text-muted-foreground\">\n {t(\n 'planmagnet.dashboards.velocity.empty',\n 'No completed sprints yet for this project.'\n )}\n </p>\n ) : (\n <>\n <ResponsiveContainer width=\"100%\" height={190}>\n <BarChart data={chartData}>\n <CartesianGrid strokeDasharray=\"3 3\" opacity={0.2} />\n <XAxis dataKey=\"name\" tick={{ fontSize: 11 }} />\n <YAxis tick={{ fontSize: 11 }} allowDecimals={false} />\n <Tooltip />\n <Legend wrapperStyle={{ fontSize: 12 }} />\n {/* ANR-02: the empirical p15-p85 band around next sprint's forecast — full-width (no\n x1/x2) since it isn't tied to any historical sprint's x position. */}\n {forecastRange && (\n <ReferenceArea\n y1={forecastRange.p15}\n y2={forecastRange.p85}\n fill=\"var(--color-chart-2)\"\n fillOpacity={0.12}\n stroke=\"none\"\n />\n )}\n <Bar\n dataKey=\"planned\"\n name={t('planmagnet.dashboards.velocity.planned', 'Planned')}\n fill=\"#cbd5e1\"\n />\n <Bar\n dataKey=\"completed\"\n name={t('planmagnet.dashboards.velocity.completed', 'Completed')}\n fill=\"#6366f1\"\n />\n <ReferenceLine\n y={avgVelocity}\n stroke=\"#22c55e\"\n strokeDasharray=\"4 4\"\n label={{\n value: t('planmagnet.dashboards.velocity.avgLabel', 'avg'),\n fontSize: 10,\n }}\n />\n </BarChart>\n </ResponsiveContainer>\n {/* Accessible text restatement of the shaded band, for screen readers. */}\n <p className=\"mt-2 text-center text-xs text-muted-foreground\">\n {t(\n 'planmagnet.dashboards.velocity.trailingAverage',\n 'Median of the last {{count}} completed sprints: {{points}} pts per sprint',\n { count: chartData.length, points: forecastNextSprint }\n )}\n {forecastRange &&\n ` · ${t(\n 'planmagnet.dashboards.velocity.range',\n 'likely range (p15–p85): {{low}}–{{high}} pts',\n { low: Math.round(forecastRange.p15), high: Math.round(forecastRange.p85) }\n )}`}\n </p>\n {insufficientHistory && (\n <p className=\"mt-1 text-center text-xs text-status-warning-text\">\n {t(\n 'planmagnet.dashboards.velocity.insufficientHistory',\n 'Fewer than 3 sprints with completed points — this forecast is low-confidence.'\n )}\n </p>\n )}\n <p className=\"mt-1 text-center text-xs text-muted-foreground\">\n {t(\n 'planmagnet.dashboards.velocity.methodLabel',\n 'Statistical forecast (not AI-generated).'\n )}\n </p>\n </>\n )}\n </CardContent>\n </Card>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"StatusFlowCard.d.ts","sourceRoot":"","sources":["../../../../src/planmagnet/pages/analytics/StatusFlowCard.tsx"],"names":[],"mappings":"AAoLA,wBAAgB,cAAc,CAAC,EAC7B,WAAW,EACX,SAAS,EACT,SAAS,EACT,OAAO,GACR,EAAE;IACD,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,6GAA6G;IAC7G,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB,2CAuJA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"StatusFlowCard.js","names":[],"sources":["../../../../src/planmagnet/pages/analytics/StatusFlowCard.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport { gql } from '@apollo/client';\nimport { useQuery } from '@apollo/client/react';\nimport { Card, CardContent, CardHeader, CardTitle } from '@burdenoff/fe-libs/ui';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { Workflow } from 'lucide-react';\nimport { ResponsiveContainer, Sankey, Tooltip } from 'recharts';\nimport { WORK_ITEM_STATUSES, enumLabel } from '../../controls/WorkItemControls';\nimport { statusVisual } from '../../utils/statusColor';\nimport { isForbidden } from '../../utils/graphqlErrors';\n\n/**\n * ANR-24: status-flow Sankey (wspace-planmagnet-svc#65 `planmagnetStatusFlow`) — aggregated status-to-status\n * transition counts for one project, over a date window capped server-side at 366 days.\n *\n * recharts' Sankey lays its nodes out by depth, walked outward from every node with no incoming link\n * (`getNodesTree` in recharts' own source), with NO cycle guard — a real transition graph almost always has\n * cycles (e.g. IN_REVIEW -> IN_PROGRESS -> IN_REVIEW, a change request), which would recurse forever. The fix:\n * every status becomes TWO Sankey nodes, a \"from\" one and a \"to\" one, so every link only ever points from the\n * \"from\" column to the \"to\" column — a strict two-level DAG by construction, however tangled the underlying\n * status graph is. This is a display transform only; it does not change what the data means (every link is\n * still exactly one observed fromStatus -> toStatus edge, whichever status is on which side of the column).\n */\n\ntype WorkItemStatusValue = (typeof WORK_ITEM_STATUSES)[number];\n\nconst GET_STATUS_FLOW = gql`\n query GetAnalyticsStatusFlow(\n $workspaceId: ID!\n $projectId: ID!\n $from: DateTime!\n $to: DateTime!\n ) {\n planmagnetStatusFlow(workspaceId: $workspaceId, projectId: $projectId, from: $from, to: $to) {\n fromStatus\n toStatus\n count\n }\n }\n`;\n\ninterface StatusFlowEdge {\n fromStatus: WorkItemStatusValue;\n toStatus: WorkItemStatusValue;\n count: number;\n}\n\ninterface StatusFlowData {\n planmagnetStatusFlow: StatusFlowEdge[];\n}\n\ninterface FlowNodeDatum {\n name: string;\n status: WorkItemStatusValue;\n side: 'from' | 'to';\n}\n\ninterface FlowLinkDatum {\n source: number;\n target: number;\n value: number;\n}\n\ninterface FlowLinkPayload {\n source: FlowNodeDatum;\n target: FlowNodeDatum;\n value: number;\n}\n\n/** The server's own cap (see the field's doc comment in graphql/wspace.graphql) — the UI never sends a wider\n * window, and says so when the page's own range would have asked for one. */\nconst MAX_WINDOW_DAYS = 366;\nconst MAX_WINDOW_MS = MAX_WINDOW_DAYS * 86_400_000;\n\nfunction clampWindow(\n startDate: string,\n endDate: string\n): { from: string; to: string; clamped: boolean } {\n const startMs = Date.parse(startDate);\n const endMs = Date.parse(endDate);\n if (!Number.isFinite(startMs) || !Number.isFinite(endMs) || endMs - startMs <= MAX_WINDOW_MS) {\n return { from: startDate, to: endDate, clamped: false };\n }\n return { from: new Date(endMs - MAX_WINDOW_MS).toISOString(), to: endDate, clamped: true };\n}\n\n/** Every status that actually appears becomes a \"from\" node (left column) and/or a \"to\" node (right column), in\n * the app's canonical status order — never in whatever order the API happened to return edges. */\nfunction buildFlow(edges: StatusFlowEdge[]): { nodes: FlowNodeDatum[]; links: FlowLinkDatum[] } {\n const fromStatuses = WORK_ITEM_STATUSES.filter((s) => edges.some((e) => e.fromStatus === s));\n const toStatuses = WORK_ITEM_STATUSES.filter((s) => edges.some((e) => e.toStatus === s));\n const fromIndex = new Map(fromStatuses.map((s, i) => [s, i]));\n const toIndex = new Map(toStatuses.map((s, i) => [s, fromStatuses.length + i]));\n\n const nodes: FlowNodeDatum[] = [\n ...fromStatuses.map((s) => ({ name: enumLabel(s), status: s, side: 'from' as const })),\n ...toStatuses.map((s) => ({ name: enumLabel(s), status: s, side: 'to' as const })),\n ];\n\n const links: FlowLinkDatum[] = edges.flatMap((e) => {\n const source = fromIndex.get(e.fromStatus);\n const target = toIndex.get(e.toStatus);\n // Every edge's statuses come straight from fromStatuses/toStatuses above, so this can never actually miss —\n // the check just keeps the result type honest without a non-null assertion.\n return source === undefined || target === undefined ? [] : [{ source, target, value: e.count }];\n });\n\n return { nodes, links };\n}\n\ninterface FlowNodeProps {\n x: number;\n y: number;\n width: number;\n height: number;\n payload: FlowNodeDatum;\n}\n\nfunction FlowNode({ x, y, width, height, payload }: FlowNodeProps) {\n const visual = statusVisual(payload.status);\n const isFrom = payload.side === 'from';\n return (\n <g>\n <rect\n x={x}\n y={y}\n width={width}\n height={height}\n rx={2}\n style={{ fill: visual.color, stroke: visual.color }}\n strokeWidth={1}\n />\n <text\n x={isFrom ? x - 6 : x + width + 6}\n y={y + height / 2}\n dy=\"0.32em\"\n textAnchor={isFrom ? 'end' : 'start'}\n className=\"fill-foreground text-[11px]\"\n >\n {payload.name}\n </text>\n </g>\n );\n}\n\ninterface FlowLinkProps {\n sourceX: number;\n sourceY: number;\n targetX: number;\n targetY: number;\n sourceControlX: number;\n targetControlX: number;\n linkWidth: number;\n payload: FlowLinkPayload;\n}\n\nfunction FlowLink({\n sourceX,\n sourceY,\n targetX,\n targetY,\n sourceControlX,\n targetControlX,\n linkWidth,\n payload,\n}: FlowLinkProps) {\n // Colored by the transition's origin status — the same fixed status->color mapping every other visualization\n // in this app (Gantt, dependency graph) uses, read via statusVisual rather than a second color table.\n const visual = statusVisual(payload.source.status);\n return (\n <path\n d={`M${sourceX},${sourceY} C${sourceControlX},${sourceY} ${targetControlX},${targetY} ${targetX},${targetY}`}\n style={{ stroke: visual.color }}\n strokeWidth={Math.max(linkWidth, 1)}\n strokeOpacity={0.45}\n fill=\"none\"\n />\n );\n}\n\nexport function StatusFlowCard({\n workspaceId,\n projectId,\n startDate,\n endDate,\n}: {\n workspaceId?: string | null;\n /** Status flow is always one project (`projectId: ID!` on the server) — same convention as CycleTimeCard. */\n projectId: string;\n startDate: string;\n endDate: string;\n}) {\n const { t } = useI18n();\n const clamp = useMemo(() => clampWindow(startDate, endDate), [startDate, endDate]);\n const { data, loading, error } = useQuery<StatusFlowData>(GET_STATUS_FLOW, {\n variables: { workspaceId, projectId, from: clamp.from, to: clamp.to },\n skip: !workspaceId || !projectId,\n });\n // Recomputed straight from `data` on every render rather than behind its own useMemo: at most a handful of\n // statuses and edges, and `?? []` below would hand memoization a fresh array identity every render anyway —\n // same call this page's own project/sprint default-picking makes for a similarly small list.\n const edges = data?.planmagnetStatusFlow ?? [];\n const { nodes, links } = buildFlow(edges);\n const sortedEdges = [...edges].sort((a, b) => b.count - a.count);\n\n return (\n <Card data-testid=\"status-flow-card\">\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Workflow className=\"h-4 w-4\" />\n {t('planmagnet.analytics.statusFlow.title', 'Status flow')}\n </CardTitle>\n <p className=\"text-xs text-muted-foreground\">\n {t(\n 'planmagnet.analytics.statusFlow.subtitle',\n 'How work items moved between statuses in the selected range.'\n )}\n </p>\n {clamp.clamped && (\n <p className=\"text-xs text-status-warning-text\">\n {t(\n 'planmagnet.analytics.statusFlow.clamped',\n 'Status flow is capped at a {{days}}-day window — showing the most recent {{days}} days of the selected range (from {{from}}).',\n { days: MAX_WINDOW_DAYS, from: clamp.from.slice(0, 10) }\n )}\n </p>\n )}\n </CardHeader>\n <CardContent>\n {!projectId ? (\n <p className=\"text-sm text-muted-foreground\">\n {t(\n 'planmagnet.analytics.statusFlow.noProject',\n 'Select a project to see its status flow.'\n )}\n </p>\n ) : loading && !data ? (\n <div className=\"flex justify-center py-12\">\n <div className=\"animate-spin h-6 w-6 border-2 border-primary border-t-transparent rounded-full\" />\n </div>\n ) : error ? (\n <p className=\"text-sm text-status-error-text\">\n {isForbidden(error)\n ? t(\n 'planmagnet.analytics.statusFlow.forbidden',\n 'You do not have access to status flow for this project.'\n )\n : `${t('planmagnet.analytics.statusFlow.error', 'Status flow could not be loaded')}: ${error.message}`}\n </p>\n ) : edges.length === 0 ? (\n <p className=\"text-sm text-muted-foreground py-8 text-center\">\n {t(\n 'planmagnet.analytics.statusFlow.empty',\n 'No status changes recorded for this project in the selected range.'\n )}\n </p>\n ) : (\n <div className=\"space-y-4\">\n <div data-testid=\"viz-status-flow\">\n <ResponsiveContainer width=\"100%\" height={Math.max(260, nodes.length * 24)}>\n <Sankey\n data={{ nodes, links }}\n node={FlowNode}\n link={FlowLink}\n nodeWidth={10}\n nodePadding={16}\n linkCurvature={0.5}\n margin={{ top: 8, right: 90, bottom: 8, left: 90 }}\n >\n <Tooltip\n content={({ active, payload }) => {\n if (!active || !payload || payload.length === 0) return null;\n // recharts types a Sankey tooltip payload's inner `.payload` as `any` — it nests our own\n // node/link datum one level below recharts' own node/link render-props wrapper. Narrowed\n // here, once, rather than threading `any` through the render below.\n const el = payload[0]?.payload as\n | { payload?: FlowNodeDatum | FlowLinkPayload }\n | undefined;\n const inner = el?.payload;\n if (!inner) return null;\n if ('source' in inner) {\n return (\n <div className=\"rounded-md border border-border bg-popover px-2.5 py-1.5 text-xs shadow-md\">\n <p className=\"font-medium text-popover-foreground\">\n {inner.source.name} → {inner.target.name}\n </p>\n <p className=\"text-muted-foreground\">\n {t(\n 'planmagnet.analytics.statusFlow.tooltipCount',\n '{{count}} item(s)',\n {\n count: inner.value,\n }\n )}\n </p>\n </div>\n );\n }\n return (\n <div className=\"rounded-md border border-border bg-popover px-2.5 py-1.5 text-xs shadow-md\">\n <p className=\"font-medium text-popover-foreground\">{inner.name}</p>\n </div>\n );\n }}\n />\n </Sankey>\n </ResponsiveContainer>\n </div>\n\n {/* Accessible table alternative — every edge the Sankey draws, in the same data. */}\n <table className=\"w-full text-sm\" data-testid=\"viz-status-flow-table\">\n <caption className=\"mb-2 text-left text-xs text-muted-foreground\">\n {t('planmagnet.analytics.statusFlow.tableCaption', 'Status transitions')}\n </caption>\n <thead>\n <tr className=\"text-left text-xs text-muted-foreground\">\n <th className=\"py-1 pr-2 font-normal\">\n {t('planmagnet.analytics.statusFlow.from', 'From')}\n </th>\n <th className=\"py-1 pr-2 font-normal\">\n {t('planmagnet.analytics.statusFlow.to', 'To')}\n </th>\n <th className=\"py-1 text-right font-normal\">\n {t('planmagnet.analytics.statusFlow.count', 'Count')}\n </th>\n </tr>\n </thead>\n <tbody>\n {sortedEdges.map((e) => (\n <tr key={`${e.fromStatus}-${e.toStatus}`} className=\"border-t\">\n <td className=\"py-1.5 pr-2\">{enumLabel(e.fromStatus)}</td>\n <td className=\"py-1.5 pr-2\">{enumLabel(e.toStatus)}</td>\n <td className=\"py-1.5 text-right tabular-nums\">{e.count}</td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )}\n </CardContent>\n </Card>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ThroughputCard.d.ts","sourceRoot":"","sources":["../../../../src/planmagnet/pages/analytics/ThroughputCard.tsx"],"names":[],"mappings":"AA6DA,wBAAgB,cAAc,CAAC,EAC7B,WAAW,EACX,SAAS,EACT,SAAS,EACT,OAAO,GACR,EAAE;IACD,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB,2CAiHA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ThroughputCard.js","names":[],"sources":["../../../../src/planmagnet/pages/analytics/ThroughputCard.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { gql } from '@apollo/client';\nimport { useQuery } from '@apollo/client/react';\nimport { Card, CardContent, CardHeader, CardTitle } from '@burdenoff/fe-libs/ui';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { BarChart3 } from 'lucide-react';\nimport {\n Bar,\n BarChart,\n CartesianGrid,\n Legend,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from 'recharts';\n\n/**\n * ANR-09: throughput on the Analytics page, with a day/week group-by — the group-by control the page's other\n * data doesn't otherwise support (a bucketed series is the one shape here that has more than one valid grouping).\n * `planmagnetThroughput` already existed for Reports (BOFF-8048); this reads the SAME field with the page's\n * shared date range instead of Reports' fixed trailing-12-weeks default.\n */\n\nconst GET_THROUGHPUT = gql`\n query GetAnalyticsThroughput(\n $workspaceId: ID!\n $projectId: ID!\n $bucket: PlanmagnetThroughputBucket\n $startDate: DateTime\n $endDate: DateTime\n ) {\n planmagnetThroughput(\n workspaceId: $workspaceId\n projectId: $projectId\n bucket: $bucket\n startDate: $startDate\n endDate: $endDate\n ) {\n bucket\n points {\n periodStart\n completedCount\n completedPoints\n }\n }\n }\n`;\n\ninterface ThroughputData {\n planmagnetThroughput: {\n bucket: 'DAY' | 'WEEK';\n points: Array<{ periodStart: string; completedCount: number; completedPoints: number }>;\n };\n}\n\nfunction formatPeriod(iso: string): string {\n const d = new Date(iso);\n return `${d.getUTCMonth() + 1}/${d.getUTCDate()}`;\n}\n\nexport function ThroughputCard({\n workspaceId,\n projectId,\n startDate,\n endDate,\n}: {\n workspaceId?: string | null;\n projectId: string;\n startDate: string;\n endDate: string;\n}) {\n const { t } = useI18n();\n const [bucket, setBucket] = useState<'DAY' | 'WEEK'>('WEEK');\n const { data, loading, error } = useQuery<ThroughputData>(GET_THROUGHPUT, {\n variables: { workspaceId, projectId, bucket, startDate, endDate },\n skip: !workspaceId || !projectId,\n });\n\n const points = data?.planmagnetThroughput.points ?? [];\n const chartData = points.map((p) => ({\n period: formatPeriod(p.periodStart),\n count: p.completedCount,\n points: p.completedPoints,\n }));\n const totalItems = points.reduce((sum, p) => sum + p.completedCount, 0);\n const totalPoints = points.reduce((sum, p) => sum + p.completedPoints, 0);\n\n return (\n <Card data-testid=\"analytics-throughput\">\n <CardHeader>\n <div className=\"flex flex-wrap items-center justify-between gap-2\">\n <CardTitle className=\"flex items-center gap-2\">\n <BarChart3 className=\"h-4 w-4\" />\n {t('planmagnet.analytics.throughput.title', 'Throughput')}\n </CardTitle>\n <div\n className=\"flex items-center gap-1 rounded-md border p-0.5\"\n role=\"group\"\n aria-label={t('planmagnet.analytics.throughput.bucketLabel', 'Group by')}\n data-testid=\"analytics-throughput-bucket\"\n >\n {(['DAY', 'WEEK'] as const).map((b) => (\n <button\n key={b}\n type=\"button\"\n aria-pressed={bucket === b}\n onClick={() => setBucket(b)}\n className={`px-2 py-1 text-xs rounded ${\n bucket === b\n ? 'bg-primary text-primary-foreground'\n : 'text-muted-foreground hover:bg-muted'\n }`}\n >\n {b === 'DAY'\n ? t('planmagnet.analytics.throughput.day', 'Day')\n : t('planmagnet.analytics.throughput.week', 'Week')}\n </button>\n ))}\n </div>\n </div>\n <p className=\"text-xs text-muted-foreground\">\n {t(\n 'planmagnet.analytics.throughput.subtitle',\n 'Work items completed per {{bucket}}, in the selected range.',\n {\n bucket:\n bucket === 'DAY'\n ? t('planmagnet.analytics.throughput.day', 'Day').toLowerCase()\n : t('planmagnet.analytics.throughput.week', 'Week').toLowerCase(),\n }\n )}\n </p>\n </CardHeader>\n <CardContent>\n {loading && !data ? (\n <div className=\"flex justify-center py-12\">\n <div className=\"animate-spin h-6 w-6 border-2 border-primary border-t-transparent rounded-full\" />\n </div>\n ) : error ? (\n <p className=\"text-sm text-muted-foreground py-8 text-center\">\n {t(\n 'planmagnet.analytics.throughput.unavailable',\n 'Throughput is not available for this project.'\n )}\n </p>\n ) : chartData.length > 0 ? (\n <>\n {/* Accessible text restatement of the chart. */}\n <p className=\"text-xs text-muted-foreground mb-2\">\n {t(\n 'planmagnet.analytics.throughput.summary',\n '{{items}} item(s), {{points}} point(s) completed across {{periods}} period(s).',\n { items: totalItems, points: totalPoints, periods: chartData.length }\n )}\n </p>\n <ResponsiveContainer width=\"100%\" height={200}>\n <BarChart data={chartData}>\n <CartesianGrid strokeDasharray=\"3 3\" opacity={0.2} />\n <XAxis dataKey=\"period\" tick={{ fontSize: 11 }} />\n <YAxis tick={{ fontSize: 11 }} allowDecimals={false} />\n <Tooltip />\n <Legend wrapperStyle={{ fontSize: 12 }} />\n <Bar\n dataKey=\"count\"\n name={t('planmagnet.analytics.throughput.items', 'Items done')}\n fill=\"var(--color-chart-1)\"\n />\n <Bar\n dataKey=\"points\"\n name={t('planmagnet.analytics.throughput.points', 'Points done')}\n fill=\"var(--color-chart-3)\"\n />\n </BarChart>\n </ResponsiveContainer>\n </>\n ) : (\n <p className=\"text-sm text-muted-foreground py-8 text-center\">\n {t('planmagnet.analytics.throughput.empty', 'No work completed in this range.')}\n </p>\n )}\n </CardContent>\n </Card>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"WorkBreakdownCard.d.ts","sourceRoot":"","sources":["../../../../src/planmagnet/pages/analytics/WorkBreakdownCard.tsx"],"names":[],"mappings":"AAoVA,wBAAgB,iBAAiB,CAAC,EAChC,WAAW,EACX,SAAS,GACV,EAAE;IACD,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,wGAAwG;IACxG,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,2CAwNA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"WorkBreakdownCard.js","names":[],"sources":["../../../../src/planmagnet/pages/analytics/WorkBreakdownCard.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { gql } from '@apollo/client';\nimport { useQuery } from '@apollo/client/react';\nimport { Card, CardContent, CardHeader, CardTitle } from '@burdenoff/fe-libs/ui';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { LayoutGrid } from 'lucide-react';\nimport { ResponsiveContainer, Tooltip, Treemap } from 'recharts';\nimport { usePlanMagnetNavigate } from '../../providers/PlanMagnetProvider';\nimport { rowLinkProps } from '../../utils/rowNavigation';\nimport { isForbidden } from '../../utils/graphqlErrors';\nimport { truncate } from '../../dependency/DependencyGraph';\n\n/**\n * ANR-24: work breakdown Treemap (wspace-planmagnet-svc#65 `planmagnetWorkBreakdown`) — live (not date-ranged;\n * see the field's own doc comment) open/done counts grouped project -> epic, with a \"No epic\" bucket per\n * project for items an epic rollup doesn't reach (see PlanmagnetNoEpicWorkBreakdown's doc comment: direct\n * children only, same as PlanmagnetEpicWorkBreakdown — a sub-task nested two levels under an epic falls here\n * too, not under its grandparent epic).\n *\n * recharts' Treemap computes a node's own size as the SUM of its children's sizes when `node.children` is set\n * (see `computeNode` in recharts' source) — so each project's own cell size, and its done-ratio color, both\n * come from summing this card's own visualized epic + \"No epic\" leaves, not from the server's separate\n * project-level totals (which include every live item in the project, not only the ones a leaf here\n * represents — see PlanmagnetProjectWorkBreakdown's doc comment). What the treemap draws and what the table\n * below it lists are therefore always the same numbers.\n */\n\ntype BreakdownMetric = 'items' | 'points';\n\nconst GET_WORK_BREAKDOWN = gql`\n query GetAnalyticsWorkBreakdown($workspaceId: ID!, $projectIds: [ID!]) {\n planmagnetWorkBreakdown(workspaceId: $workspaceId, projectIds: $projectIds) {\n truncatedProjects\n projects {\n projectId\n projectName\n truncatedEpics\n epics {\n epicId\n epicTitle\n openCount\n doneCount\n openPoints\n donePoints\n }\n noEpic {\n openCount\n doneCount\n openPoints\n donePoints\n }\n }\n }\n }\n`;\n\ninterface EpicBreakdown {\n epicId: string;\n epicTitle: string;\n openCount: number;\n doneCount: number;\n openPoints: number;\n donePoints: number;\n}\n\ninterface NoEpicBreakdown {\n openCount: number;\n doneCount: number;\n openPoints: number;\n donePoints: number;\n}\n\ninterface ProjectBreakdown {\n projectId: string;\n projectName: string;\n truncatedEpics: boolean;\n epics: EpicBreakdown[];\n noEpic: NoEpicBreakdown;\n}\n\ninterface WorkBreakdownData {\n planmagnetWorkBreakdown: {\n truncatedProjects: boolean;\n projects: ProjectBreakdown[];\n };\n}\n\ninterface CountsLike {\n openCount: number;\n doneCount: number;\n openPoints: number;\n donePoints: number;\n}\n\nfunction metricTotals(c: CountsLike, metric: BreakdownMetric): { size: number; done: number } {\n return metric === 'items'\n ? { size: c.openCount + c.doneCount, done: c.doneCount }\n : { size: c.openPoints + c.donePoints, done: c.donePoints };\n}\n\nfunction doneRatioOf(c: CountsLike, metric: BreakdownMetric): number | null {\n const { size, done } = metricTotals(c, metric);\n return size > 0 ? done / size : null;\n}\n\ninterface BreakdownLeafDatum extends CountsLike {\n name: string;\n size: number;\n doneRatio: number | null;\n /** null = not an individually openable work item (the project-group frame, or the \"No epic\" bucket). */\n epicId: string | null;\n isNoEpic: boolean;\n isHeader: boolean;\n projectId: string;\n projectName: string;\n}\n\ninterface BreakdownGroupDatum {\n name: string;\n projectId: string;\n children: BreakdownLeafDatum[];\n}\n\n/** A label cell reserves this share of each project's own area (never less than HEADER_MIN_SIZE). Small relative\n * to its real epic siblings so it barely affects the epics' own visual weight, but consistently sized so every\n * project's header reads the same size. */\nconst HEADER_FRACTION = 0.14;\nconst HEADER_MIN_SIZE = 1;\n\nfunction buildBreakdownGroups(\n projects: ProjectBreakdown[],\n metric: BreakdownMetric,\n noEpicLabel: string\n): BreakdownGroupDatum[] {\n const groups: BreakdownGroupDatum[] = [];\n\n for (const project of projects) {\n const epicLeaves: BreakdownLeafDatum[] = project.epics\n .map((epic) => ({\n name: epic.epicTitle,\n size: metricTotals(epic, metric).size,\n doneRatio: doneRatioOf(epic, metric),\n epicId: epic.epicId,\n isNoEpic: false,\n isHeader: false,\n projectId: project.projectId,\n projectName: project.projectName,\n openCount: epic.openCount,\n doneCount: epic.doneCount,\n openPoints: epic.openPoints,\n donePoints: epic.donePoints,\n }))\n .filter((leaf) => leaf.size > 0);\n\n const noEpicSize = metricTotals(project.noEpic, metric).size;\n if (noEpicSize > 0) {\n epicLeaves.push({\n name: noEpicLabel,\n size: noEpicSize,\n doneRatio: doneRatioOf(project.noEpic, metric),\n epicId: null,\n isNoEpic: true,\n isHeader: false,\n projectId: project.projectId,\n projectName: project.projectName,\n openCount: project.noEpic.openCount,\n doneCount: project.noEpic.doneCount,\n openPoints: project.noEpic.openPoints,\n donePoints: project.noEpic.donePoints,\n });\n }\n\n const totalSize = epicLeaves.reduce((sum, leaf) => sum + leaf.size, 0);\n if (totalSize <= 0) continue;\n\n // A small leading child in a list of much-larger siblings reliably becomes its own single-item row under\n // squarify's row-packing (recharts' Treemap layout): adding the next, much bigger sibling to that same row\n // would immediately worsen the row's aspect ratio, so squarify closes the row after just this one item —\n // which a single-item row always stretches to the full width (or height) of its parent rect. That makes\n // this synthetic \"header\" leaf a reliable label strip across the top (or side) of each project's own area,\n // without needing a second, hand-rolled layout pass. See WorkBreakdownCell's `isHeader` branch for the\n // render side of this.\n const headerLeaf: BreakdownLeafDatum = {\n name: project.projectName,\n size: Math.max(Math.round(totalSize * HEADER_FRACTION), HEADER_MIN_SIZE),\n doneRatio: null,\n epicId: null,\n isNoEpic: false,\n isHeader: true,\n projectId: project.projectId,\n projectName: project.projectName,\n openCount: 0,\n doneCount: 0,\n openPoints: 0,\n donePoints: 0,\n };\n\n groups.push({\n name: project.projectName,\n projectId: project.projectId,\n children: [headerLeaf, ...epicLeaves],\n });\n }\n\n return groups;\n}\n\nfunction ratioToFillOpacity(doneRatio: number | null): number {\n // Sequential, single-hue encoding on DONE's own chart color (the same hue statusVisual.ts assigns to the DONE\n // status everywhere else in this app): lighter = mostly open, darker = mostly done. Never fully transparent,\n // so a 0%-done cell still reads as a populated cell rather than empty space — and the exact ratio is always\n // available in the tooltip and the table below, so this fill is a supplementary channel, never the only way\n // to read it.\n if (doneRatio === null) return 0.12;\n return 0.18 + doneRatio * 0.72;\n}\n\ninterface WorkBreakdownCellProps {\n x?: number;\n y?: number;\n width?: number;\n height?: number;\n depth?: number;\n name?: string;\n isHeader?: boolean;\n isNoEpic?: boolean;\n epicId?: string | null;\n doneRatio?: number | null;\n onOpenEpic: (epicId: string) => void;\n noEpicLabel: string;\n}\n\nfunction WorkBreakdownCell(props: WorkBreakdownCellProps) {\n const {\n x = 0,\n y = 0,\n width = 0,\n height = 0,\n depth = 0,\n name = '',\n isHeader = false,\n isNoEpic = false,\n epicId = null,\n doneRatio = null,\n onOpenEpic,\n noEpicLabel,\n } = props;\n\n if (width <= 0 || height <= 0) return null;\n\n if (depth === 0) {\n // recharts wraps the ENTIRE `data` array (every project combined) in one synthetic root at depth 0\n // (see `computeNode` / `getDerivedStateFromProps` in recharts' own Treemap source) — this fires exactly\n // once for the whole chart area, never once per project. It has no boundary of its own to draw (a rect\n // here would be one border around every project combined, not a per-project frame), so render nothing.\n return null;\n }\n\n if (depth === 1) {\n // The real per-project frame: recharts assigns depth 1 to each top-level entry of `data` — i.e. one\n // `BreakdownGroupDatum` per project — so this branch fires once per project, at that project's own\n // bounds. Drawn first (recharts renders a non-leaf node's own content, then its children, in that\n // order), so the header + epic leaves at depth 2 paint on top of it within the same bounds.\n // Never filled: fill is reserved for done-ratio below, so the frame reads purely as a boundary.\n return (\n <rect\n x={x}\n y={y}\n width={width}\n height={height}\n rx={4}\n className=\"fill-none stroke-border\"\n strokeWidth={1}\n />\n );\n }\n\n const label = isNoEpic ? noEpicLabel : name;\n const showLabel = width > 28 && height > 14;\n const fitChars = Math.max(1, Math.floor((width - 8) / 6));\n const displayLabel = truncate(label, fitChars);\n\n if (isHeader) {\n return (\n <g>\n <rect x={x} y={y} width={width} height={height} className=\"fill-muted\" />\n {showLabel && (\n <text\n x={x + 4}\n y={y + height / 2}\n dy=\"0.32em\"\n className=\"fill-foreground text-[11px] font-medium\"\n >\n {displayLabel}\n </text>\n )}\n </g>\n );\n }\n\n const cellRect = (\n <rect\n x={x}\n y={y}\n width={width}\n height={height}\n className=\"stroke-background\"\n style={{ fill: 'var(--color-chart-2)', fillOpacity: ratioToFillOpacity(doneRatio) }}\n strokeWidth={2}\n />\n );\n const cellLabel = showLabel && (\n <text x={x + 4} y={y + height / 2} dy=\"0.32em\" className=\"fill-foreground text-[11px]\">\n {displayLabel}\n </text>\n );\n\n if (!epicId) {\n // \"No epic\" bucket — an aggregate of several work items, not one item, so there is nothing to navigate to.\n return (\n <g>\n {cellRect}\n {cellLabel}\n </g>\n );\n }\n\n const accessibleLabel = `${name} — ${Math.round((doneRatio ?? 0) * 100)}% done`;\n return (\n <g\n {...rowLinkProps<SVGGElement>(() => onOpenEpic(epicId), accessibleLabel)}\n className=\"cursor-pointer focus:outline-none focus-visible:outline focus-visible:outline-2 focus-visible:outline-primary focus-visible:outline-offset-2\"\n >\n <title>{accessibleLabel}</title>\n {cellRect}\n {cellLabel}\n </g>\n );\n}\n\nexport function WorkBreakdownCard({\n workspaceId,\n projectId,\n}: {\n workspaceId?: string | null;\n /** ANR-09 project scope. Omitted/undefined = every project (up to 50 — see truncatedProjects below). */\n projectId?: string;\n}) {\n const { t } = useI18n();\n const navigate = usePlanMagnetNavigate();\n const [metric, setMetric] = useState<BreakdownMetric>('items');\n const { data, loading, error } = useQuery<WorkBreakdownData>(GET_WORK_BREAKDOWN, {\n variables: { workspaceId, projectIds: projectId ? [projectId] : undefined },\n skip: !workspaceId,\n });\n\n const noEpicLabel = t('planmagnet.analytics.workBreakdown.noEpic', 'No epic');\n const breakdown = data?.planmagnetWorkBreakdown;\n const projects = breakdown?.projects ?? [];\n const groups = buildBreakdownGroups(projects, metric, noEpicLabel);\n const truncatedProjectNames = projects.filter((p) => p.truncatedEpics).map((p) => p.projectName);\n\n function openEpic(epicId: string) {\n navigate(`/tasks/task-detail-page?taskId=${encodeURIComponent(epicId)}`);\n }\n\n return (\n <Card data-testid=\"work-breakdown-card\">\n <CardHeader>\n <div className=\"flex flex-wrap items-center justify-between gap-2\">\n <CardTitle className=\"flex items-center gap-2\">\n <LayoutGrid className=\"h-4 w-4\" />\n {t('planmagnet.analytics.workBreakdown.title', 'Work breakdown')}\n </CardTitle>\n <div\n className=\"flex items-center gap-1 rounded-md border p-0.5\"\n role=\"group\"\n aria-label={t('planmagnet.analytics.workBreakdown.metricLabel', 'Size by')}\n data-testid=\"viz-breakdown-metric\"\n >\n {(['items', 'points'] as const).map((m) => (\n <button\n key={m}\n type=\"button\"\n aria-pressed={metric === m}\n onClick={() => setMetric(m)}\n className={`px-2 py-1 text-xs rounded ${\n metric === m\n ? 'bg-primary text-primary-foreground'\n : 'text-muted-foreground hover:bg-muted'\n }`}\n >\n {m === 'items'\n ? t('planmagnet.analytics.workBreakdown.items', 'Items')\n : t('planmagnet.analytics.workBreakdown.points', 'Story points')}\n </button>\n ))}\n </div>\n </div>\n <p className=\"text-xs text-muted-foreground\">\n {t(\n 'planmagnet.analytics.workBreakdown.subtitle',\n 'Live open/done work, by project and epic — current state, not limited by the date range above.'\n )}\n </p>\n </CardHeader>\n <CardContent>\n {loading && !data ? (\n <div className=\"flex justify-center py-12\">\n <div className=\"animate-spin h-6 w-6 border-2 border-primary border-t-transparent rounded-full\" />\n </div>\n ) : error ? (\n <p className=\"text-sm text-status-error-text\">\n {isForbidden(error)\n ? t(\n 'planmagnet.analytics.workBreakdown.forbidden',\n 'You do not have access to the work breakdown for this scope.'\n )\n : `${t('planmagnet.analytics.workBreakdown.error', 'Work breakdown could not be loaded')}: ${error.message}`}\n </p>\n ) : groups.length === 0 ? (\n <p className=\"text-sm text-muted-foreground py-8 text-center\">\n {t(\n 'planmagnet.analytics.workBreakdown.empty',\n 'No live work items found for this scope.'\n )}\n </p>\n ) : (\n <div className=\"space-y-3\">\n {breakdown?.truncatedProjects && (\n <p className=\"text-xs text-status-warning-text\">\n {t(\n 'planmagnet.analytics.workBreakdown.truncatedProjects',\n 'Showing the first 50 projects with live work. Narrow by project above to see a specific one.'\n )}\n </p>\n )}\n {truncatedProjectNames.length > 0 && (\n <p className=\"text-xs text-status-warning-text\">\n {t(\n 'planmagnet.analytics.workBreakdown.truncatedEpics',\n 'Showing at most 200 epics for: {{projects}}.',\n { projects: truncatedProjectNames.join(', ') }\n )}\n </p>\n )}\n\n <div data-testid=\"viz-work-breakdown\">\n <ResponsiveContainer width=\"100%\" height={360}>\n <Treemap\n data={groups}\n dataKey=\"size\"\n type=\"flat\"\n aspectRatio={4 / 3}\n content={<WorkBreakdownCell onOpenEpic={openEpic} noEpicLabel={noEpicLabel} />}\n >\n <Tooltip\n content={({ active, payload }) => {\n if (!active || !payload || payload.length === 0) return null;\n // Treemap hands back our own leaf datum directly as `payload.payload` (recharts types it\n // as `any`); narrowed here, once.\n const node = payload[0]?.payload as BreakdownLeafDatum | undefined;\n if (!node || node.isHeader) return null;\n const label = node.isNoEpic ? noEpicLabel : node.name;\n return (\n <div className=\"rounded-md border border-border bg-popover px-2.5 py-1.5 text-xs shadow-md\">\n <p className=\"font-medium text-popover-foreground\">{label}</p>\n {!node.isNoEpic && (\n <p className=\"text-muted-foreground\">{node.projectName}</p>\n )}\n <p className=\"mt-1\">\n {t('planmagnet.analytics.workBreakdown.tooltipOpen', 'Open')}:{' '}\n {node.openCount} ({node.openPoints}{' '}\n {t('planmagnet.analytics.workBreakdown.pts', 'pts')}) ·{' '}\n {t('planmagnet.analytics.workBreakdown.tooltipDone', 'Done')}:{' '}\n {node.doneCount} ({node.donePoints}{' '}\n {t('planmagnet.analytics.workBreakdown.pts', 'pts')})\n </p>\n <p>\n {t('planmagnet.analytics.workBreakdown.doneRatio', 'Done ratio')}:{' '}\n {node.doneRatio === null ? '—' : `${Math.round(node.doneRatio * 100)}%`}\n </p>\n </div>\n );\n }}\n />\n </Treemap>\n </ResponsiveContainer>\n </div>\n <p className=\"text-xs text-muted-foreground\">\n {t(\n 'planmagnet.analytics.workBreakdown.legend',\n 'Shade = share done (lighter → more open, darker → more done). Click an epic to open it.'\n )}\n </p>\n\n {/* Accessible table alternative — every group/epic the treemap draws, in the same data. */}\n <table className=\"w-full text-sm\" data-testid=\"viz-work-breakdown-table\">\n <caption className=\"mb-2 text-left text-xs text-muted-foreground\">\n {t(\n 'planmagnet.analytics.workBreakdown.tableCaption',\n 'Work breakdown by project and epic'\n )}\n </caption>\n <thead>\n <tr className=\"text-left text-xs text-muted-foreground\">\n <th className=\"py-1 pr-2 font-normal\">\n {t('planmagnet.analytics.workBreakdown.project', 'Project')}\n </th>\n <th className=\"py-1 pr-2 font-normal\">\n {t('planmagnet.analytics.workBreakdown.epic', 'Epic')}\n </th>\n <th className=\"py-1 text-right font-normal\">\n {t('planmagnet.analytics.workBreakdown.tooltipOpen', 'Open')}\n </th>\n <th className=\"py-1 text-right font-normal\">\n {t('planmagnet.analytics.workBreakdown.tooltipDone', 'Done')}\n </th>\n <th className=\"py-1 text-right font-normal\">\n {t('planmagnet.analytics.workBreakdown.doneRatio', 'Done ratio')}\n </th>\n </tr>\n </thead>\n <tbody>\n {groups.flatMap((g) =>\n g.children\n .filter((leaf) => !leaf.isHeader)\n .map((leaf) => {\n const epicId = leaf.epicId;\n const open = metric === 'items' ? leaf.openCount : leaf.openPoints;\n const done = metric === 'items' ? leaf.doneCount : leaf.donePoints;\n return (\n <tr key={`${g.projectId}-${epicId ?? 'no-epic'}`} className=\"border-t\">\n <td className=\"py-1.5 pr-2\">{g.name}</td>\n <td className=\"py-1.5 pr-2\">\n {epicId ? (\n <button\n type=\"button\"\n className=\"text-left text-primary hover:underline focus-visible:outline focus-visible:outline-2 focus-visible:outline-primary\"\n onClick={() => openEpic(epicId)}\n >\n {leaf.name}\n </button>\n ) : (\n noEpicLabel\n )}\n </td>\n <td className=\"py-1.5 text-right tabular-nums\">{open}</td>\n <td className=\"py-1.5 text-right tabular-nums\">{done}</td>\n <td className=\"py-1.5 text-right tabular-nums\">\n {leaf.doneRatio === null ? '—' : `${Math.round(leaf.doneRatio * 100)}%`}\n </td>\n </tr>\n );\n })\n )}\n </tbody>\n </table>\n </div>\n )}\n </CardContent>\n </Card>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"analyticsRange.d.ts","sourceRoot":"","sources":["../../../../src/planmagnet/pages/analytics/analyticsRange.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,MAAM,WAAW,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC;AAC5C,eAAO,MAAM,aAAa,EAAE,SAAS,WAAW,EAAsB,CAAC;AAEvE,MAAM,WAAW,SAAS;IACxB,6BAA6B;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,6BAA6B;IAC7B,EAAE,EAAE,MAAM,CAAC;CACZ;AAID,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,CAEzC;AAED,mFAAmF;AACnF,wBAAgB,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,CAI1D;AAED,sFAAsF;AACtF,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAI9D;AAED;oFACoF;AACpF,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,CAMrE;AAED,iGAAiG;AACjG,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,GAAG;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAKzF;AAED,eAAO,MAAM,aAAa,EAAE,SAA6B,CAAC;AAE1D;wGACwG;AACxG,eAAO,MAAM,YAAY,QAAQ,CAAC;AAElC,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAElE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAInF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"analyticsRange.js","names":[],"sources":["../../../../src/planmagnet/pages/analytics/analyticsRange.ts"],"sourcesContent":["/**\n * Date-range + project-scope helpers for Analytics (ANR-09), the Dashboard tiles that\n * link into it, and My dashboard (ANR-08). Dates are plain \"YYYY-MM-DD\" strings in the\n * UI and the URL — the DateTime scalar wants a full ISO instant, so `toRangeVariables`\n * converts at the query boundary only, once, so every query sends the same UTC day\n * boundaries instead of each caller rolling its own.\n *\n * Kept framework-free (no React) so it is trivially unit-testable and importable from\n * any page without pulling in a component tree.\n */\n\nexport type RangePreset = '7' | '30' | '90';\nexport const RANGE_PRESETS: readonly RangePreset[] = ['7', '30', '90'];\n\nexport interface DateRange {\n /** YYYY-MM-DD, inclusive. */\n from: string;\n /** YYYY-MM-DD, inclusive. */\n to: string;\n}\n\nconst ISO_DATE = /^\\d{4}-\\d{2}-\\d{2}$/;\n\nexport function toIsoDate(d: Date): string {\n return d.toISOString().slice(0, 10);\n}\n\n/** The trailing N days up to and including today, both ends as plain UTC dates. */\nexport function presetRange(preset: RangePreset): DateRange {\n const to = new Date();\n const from = new Date(to.getTime() - (Number(preset) - 1) * 86_400_000);\n return { from: toIsoDate(from), to: toIsoDate(to) };\n}\n\n/** Well-formed dates with `from` on or before `to`. Never throws on garbage input. */\nexport function isValidRange(from: string, to: string): boolean {\n if (!ISO_DATE.test(from) || !ISO_DATE.test(to)) return false;\n // ISO \"YYYY-MM-DD\" strings compare lexicographically in the same order as chronologically.\n return from <= to;\n}\n\n/** Which preset (if any) a range currently matches — recomputed every call, never cached, so it can never drift\n * out of sync with a range that moved for some other reason (e.g. a URL paste). */\nexport function activePreset(range: DateRange): RangePreset | 'custom' {\n for (const p of RANGE_PRESETS) {\n const r = presetRange(p);\n if (r.from === range.from && r.to === range.to) return p;\n }\n return 'custom';\n}\n\n/** DateTime query variables for a range: UTC start-of-day .. end-of-day, inclusive both ends. */\nexport function toRangeVariables(range: DateRange): { startDate: string; endDate: string } {\n return {\n startDate: `${range.from}T00:00:00.000Z`,\n endDate: `${range.to}T23:59:59.999Z`,\n };\n}\n\nexport const DEFAULT_RANGE: DateRange = presetRange('30');\n\n/** Sentinel value for \"every project\" in a scope <select> — GraphQL project-scoped args are optional/omitted,\n * never an empty string, so this never leaks into a query variable itself (see `scopeToProjectId`). */\nexport const ALL_PROJECTS = 'all';\n\nexport function scopeToProjectId(scope: string): string | undefined {\n return scope && scope !== ALL_PROJECTS ? scope : undefined;\n}\n\n/**\n * The query string Analytics reads back (`?from=&to=&project=`), so a view stays linkable and a Dashboard tile\n * can deep-link into it pre-filtered (ANR-09). `projectId` omitted or falsy means \"every project\".\n */\nexport function analyticsSearch(range: DateRange, projectId?: string | null): string {\n const params = new URLSearchParams({ from: range.from, to: range.to });\n if (projectId) params.set('project', projectId);\n return `?${params.toString()}`;\n}\n"],"mappings":";AAYA,IAAa,IAAwC;CAAC;CAAK;CAAM;CAAK,EAShE,IAAW;AAEjB,SAAgB,EAAU,GAAiB;AACzC,QAAO,EAAE,aAAa,CAAC,MAAM,GAAG,GAAG;;AAIrC,SAAgB,EAAY,GAAgC;CAC1D,IAAM,oBAAK,IAAI,MAAM;AAErB,QAAO;EAAE,MAAM,kBADF,IAAI,KAAK,EAAG,SAAS,IAAI,OAAO,EAAO,GAAG,KAAK,MAAW,CACzC;EAAE,IAAI,EAAU,EAAG;EAAE;;AAIrD,SAAgB,EAAa,GAAc,GAAqB;AAG9D,QAFI,CAAC,EAAS,KAAK,EAAK,IAAI,CAAC,EAAS,KAAK,EAAG,GAAS,KAEhD,KAAQ;;AAKjB,SAAgB,EAAa,GAA0C;AACrE,MAAK,IAAM,KAAK,GAAe;EAC7B,IAAM,IAAI,EAAY,EAAE;AACxB,MAAI,EAAE,SAAS,EAAM,QAAQ,EAAE,OAAO,EAAM,GAAI,QAAO;;AAEzD,QAAO;;AAIT,SAAgB,EAAiB,GAA0D;AACzF,QAAO;EACL,WAAW,GAAG,EAAM,KAAK;EACzB,SAAS,GAAG,EAAM,GAAG;EACtB;;AAGqC,EAAY,KAAK;AAMzD,SAAgB,EAAiB,GAAmC;AAClE,QAAO,KAAS,MAAA,QAAyB,IAAQ,KAAA;;AAOnD,SAAgB,EAAgB,GAAkB,GAAmC;CACnF,IAAM,IAAS,IAAI,gBAAgB;EAAE,MAAM,EAAM;EAAM,IAAI,EAAM;EAAI,CAAC;AAEtE,QADI,KAAW,EAAO,IAAI,WAAW,EAAU,EACxC,IAAI,EAAO,UAAU"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"People.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/people/People.tsx"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,YAAY,EAElB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAOL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AA4Cf;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,cAAc,CAAC;AAE9C,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAEzE;AAED;8GAC8G;AAC9G,wBAAgB,cAAc,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,2CAMnE;AAID,wBAAgB,cAAc,CAAC,EAC7B,WAAW,EACX,QAAQ,GACT,EAAE;IACD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,SAAS,CAAC;CACrB,2CAkBA;AAED,MAAM,WAAW,eAAe;IAC9B,sDAAsD;IACtD,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;GAMG;AACH;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,YAAY,GAAG,IAAI,CA2BnF;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,eAAe,2CAW5D;AAED,mFAAmF;AACnF,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQ/C;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,iBAAiB,2CAahE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"People.js","names":[],"sources":["../../../src/planmagnet/people/People.tsx"],"sourcesContent":["import {\n buildActorFallback,\n useActorProfiles,\n type ActorInput,\n type ActorProfile,\n type ActorProfileMap,\n} from '@burdenoff/fe-libs/shared';\nimport { Badge } from '@burdenoff/fe-libs/ui';\nimport {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n type ReactNode,\n} from 'react';\n\n/**\n * Show people by name, not by UUID.\n *\n * Until 2026-09-24, 21 places in this MFE rendered a raw user id where a\n * person belonged — project owners, roadmap owners, assignees, the team lead.\n * fe-libs already resolves ids to workspace-member identities\n * (`useActorProfiles`, with a 5-minute cache), but it batches per CALL and\n * does not dedupe across calls, so calling it from every row would fire a\n * burst of lookups on the first render of each list.\n *\n * So there is exactly one call, here. Every `<PersonName id>` on screen\n * registers its id with the provider; ids registered during the same render\n * land in one state update, and the provider resolves them together. A\n * growing list costs one request for the NEW ids only — already-resolved ids\n * come from the fe-libs cache.\n *\n * An id that cannot be resolved (not a member of this workspace, lookup\n * failed) renders fe-libs' short fallback, \"User 1a2b3c\", rather than the full\n * UUID: still identifiable, never a wall of hex.\n */\n\ninterface PeopleContextValue {\n request: (id: string) => void;\n profiles: ActorProfileMap;\n}\n\n/**\n * The automation engine's own actor identities (BOFF-8047 follow-up) — never a real workspace member's id, so\n * they are mapped explicitly rather than sent through `useActorProfiles` (which would only ever resolve them to\n * its generic \"not a member\" fallback). Sourced directly from wspace-planmagnet-svc, not guessed:\n * - `automation-engine.ts`'s `AUTOMATION_COMMENT_AUTHOR_ID` (`'automation:engine'`) — the fixed author of every\n * comment a POST_COMMENT action posts, regardless of which trigger or actor caused the run.\n * - `automation-scheduler.ts`'s `AUTOMATION_SCHEDULER_ACTOR_ID` (`'automation:scheduler'`) — the actor behind a\n * SCHEDULE-triggered run (threaded through as `updatedBy` on that run's other actions).\n * No real actor id can ever collide with the `automation:` prefix (workspace-member ids are uuids) — see that\n * constant's own doc comment in the engine.\n */\nconst AUTOMATION_ACTOR_NAMES: Record<string, string> = {\n 'automation:engine': 'Automation',\n 'automation:scheduler': 'Automation',\n};\n\n/**\n * CWF-15's redaction sentinel: `FeatureRequest.submittedBy`/`createdBy`/`updatedBy` and `FeatureVote.voterId`\n * read back this literal string, instead of the real actor id, for a non-moderator caller when the record (or,\n * for a vote, that vote) is flagged `isAnonymous`. Never a real actor id — those are workspace-member uuids —\n * so, like the `automation:` actor ids above, it must never be sent through `useActorProfiles`: that would only\n * ever resolve to the generic \"not a member\" fallback, and would burn a wasted slot in every batch lookup.\n */\nexport const ANONYMOUS_ACTOR_ID = 'anonymous';\n\nexport function isAnonymousActorId(id: string | null | undefined): boolean {\n return id === ANONYMOUS_ACTOR_ID;\n}\n\n/** The literal \"Anonymous\" badge CWF-15 asks for everywhere a redacted actor id would otherwise show — see\n * `PersonName` below, which is the one place `submittedBy`/`createdBy`/`updatedBy`/`voterId` ever render. */\nexport function AnonymousBadge({ className }: { className?: string }) {\n return (\n <Badge variant=\"secondary\" className={className ?? 'text-xs'} data-testid=\"anonymous-badge\">\n Anonymous\n </Badge>\n );\n}\n\nconst PeopleContext = createContext<PeopleContextValue | null>(null);\n\nexport function PeopleProvider({\n workspaceId,\n children,\n}: {\n workspaceId?: string;\n children: ReactNode;\n}) {\n const [ids, setIds] = useState<readonly string[]>([]);\n\n const request = useCallback((id: string) => {\n setIds((previous) => (previous.includes(id) ? previous : [...previous, id]));\n }, []);\n\n const actors = useMemo<ActorInput[]>(\n () => ids.map((actorId) => ({ actorId, actorType: 'user' })),\n [ids]\n );\n\n // No apiGatewayUrl on purpose: this MFE is handed the WORKSPACE gateway, and\n // the hook resolves the right gateways from the hostname itself.\n const profiles = useActorProfiles(actors, { workspaceId });\n\n const value = useMemo(() => ({ request, profiles }), [request, profiles]);\n return <PeopleContext.Provider value={value}>{children}</PeopleContext.Provider>;\n}\n\nexport interface PersonNameProps {\n /** A user id. Empty or missing renders an em dash. */\n id: string | null | undefined;\n className?: string;\n}\n\n/**\n * Inline text on purpose. fe-libs' `ActorIdentity` is a block (avatar plus two\n * stacked paragraphs); every place this replaces is an inline label —\n * \"Owner: …\", a table cell, a <span> inside a <p> — where a block would break\n * the layout and nest a <div> inside a <p>. The email, when known, is the\n * hover title, so two people with the same name stay distinguishable.\n */\n/**\n * Register an id with the provider and return its profile: the resolved identity, or fe-libs' short fallback\n * (\"User 1a2b3c\", `resolved: false`) until and unless it resolves. `null` for an empty id.\n */\nexport function usePersonProfile(id: string | null | undefined): ActorProfile | null {\n const context = useContext(PeopleContext);\n const request = context?.request;\n const automationName = id ? AUTOMATION_ACTOR_NAMES[id] : undefined;\n const anonymous = isAnonymousActorId(id);\n\n useEffect(() => {\n // An automation identity is never a real workspace member, and the CWF-15 \"anonymous\" sentinel is never an\n // actor id at all — registering either with the provider would only ever come back as the generic \"not a\n // member\" fallback, and would cost a wasted slot in every batch lookup.\n if (id && request && !automationName && !anonymous) request(id);\n }, [id, request, automationName, anonymous]);\n\n if (!id) return null;\n if (automationName) {\n return {\n actorId: id,\n actorType: 'service',\n displayName: automationName,\n secondaryLabel: 'Automation',\n resolved: true,\n };\n }\n // CWF-15: \"anonymous\" is a redaction sentinel, never a real actor id — PersonName/PersonAvatar below render it\n // specially rather than resolving it (which would only ever land on the generic \"not a member\" fallback).\n if (anonymous) return null;\n return context?.profiles[id] ?? buildActorFallback({ actorId: id, actorType: 'user' });\n}\n\nexport function PersonName({ id, className }: PersonNameProps) {\n const profile = usePersonProfile(id);\n // CWF-15: the literal \"anonymous\" sentinel renders as the Anonymous badge everywhere a person's name would\n // otherwise show — never resolved as, or displayed like, a real user id.\n if (isAnonymousActorId(id)) return <AnonymousBadge className={className} />;\n if (!profile) return <span className={className ?? 'text-muted-foreground'}>—</span>;\n return (\n <span className={className} title={profile.email ?? undefined}>\n {profile.displayName}\n </span>\n );\n}\n\n/** Up to two initials from a display name (\"Ada Lovelace\" → \"AL\", \"ada\" → \"A\"). */\nexport function initialsOf(name: string): string {\n return name\n .trim()\n .split(/\\s+/)\n .filter(Boolean)\n .slice(0, 2)\n .map((word) => word[0]!.toUpperCase())\n .join('');\n}\n\nexport interface PersonAvatarProps {\n id: string | null | undefined;\n className?: string;\n}\n\n/**\n * An initials bubble for a user id. Initials come from the RESOLVED name; until the id resolves (or when it never\n * does) the bubble shows a neutral \"?\" rather than letters cut from the UUID, which matched nobody (BOFF-7977,\n * BOFF-8000). The tooltip is the name, plus the email when known.\n */\nexport function PersonAvatar({ id, className }: PersonAvatarProps) {\n const profile = usePersonProfile(id);\n const label = profile\n ? profile.email\n ? `${profile.displayName} (${profile.email})`\n : profile.displayName\n : undefined;\n const initials = profile?.resolved ? initialsOf(profile.displayName) : '';\n return (\n <span className={className} title={label} aria-label={label}>\n {initials || '?'}\n </span>\n );\n}\n"],"mappings":";;;;;AAuDA,IAAM,IAAiD;CACrD,qBAAqB;CACrB,wBAAwB;CACzB,EASY,IAAqB;AAElC,SAAgB,EAAmB,GAAwC;AACzE,QAAO,MAAO;;AAKhB,SAAgB,EAAe,EAAE,gBAAqC;AACpE,QACE,kBAAC,GAAD;EAAO,SAAQ;EAAY,WAAW,KAAa;EAAW,eAAY;YAAkB;EAEpF,CAAA;;AAIZ,IAAM,IAAgB,EAAyC,KAAK;AAEpE,SAAgB,EAAe,EAC7B,gBACA,eAIC;CACD,IAAM,CAAC,GAAK,KAAU,EAA4B,EAAE,CAAC,EAE/C,IAAU,GAAa,MAAe;AAC1C,KAAQ,MAAc,EAAS,SAAS,EAAG,GAAG,IAAW,CAAC,GAAG,GAAU,EAAG,CAAE;IAC3E,EAAE,CAAC,EASA,IAAW,EAPF,QACP,EAAI,KAAK,OAAa;EAAE;EAAS,WAAW;EAAQ,EAAE,EAC5D,CAAC,EAAI,CACN,EAIyC,EAAE,gBAAa,CAAC,EAEpD,IAAQ,SAAe;EAAE;EAAS;EAAU,GAAG,CAAC,GAAS,EAAS,CAAC;AACzE,QAAO,kBAAC,EAAc,UAAf;EAA+B;EAAQ;EAAkC,CAAA;;AAoBlF,SAAgB,EAAiB,GAAoD;CACnF,IAAM,IAAU,EAAW,EAAc,EACnC,IAAU,GAAS,SACnB,IAAiB,IAAK,EAAuB,KAAM,KAAA,GACnD,IAAY,EAAmB,EAAG;AAsBxC,QApBA,QAAgB;AAId,EAAI,KAAM,KAAW,CAAC,KAAkB,CAAC,KAAW,EAAQ,EAAG;IAC9D;EAAC;EAAI;EAAS;EAAgB;EAAU,CAAC,EAEvC,IACD,IACK;EACL,SAAS;EACT,WAAW;EACX,aAAa;EACb,gBAAgB;EAChB,UAAU;EACX,GAIC,IAAkB,OACf,GAAS,SAAS,MAAO,EAAmB;EAAE,SAAS;EAAI,WAAW;EAAQ,CAAC,GAbtE;;AAgBlB,SAAgB,EAAW,EAAE,OAAI,gBAA8B;CAC7D,IAAM,IAAU,EAAiB,EAAG;AAKpC,QAFI,EAAmB,EAAG,GAAS,kBAAC,GAAD,EAA2B,cAAa,CAAA,GACtE,IAEH,kBAAC,QAAD;EAAiB;EAAW,OAAO,EAAQ,SAAS,KAAA;YACjD,EAAQ;EACJ,CAAA,GAJY,kBAAC,QAAD;EAAM,WAAW,KAAa;YAAyB;EAAQ,CAAA;;AAStF,SAAgB,EAAW,GAAsB;AAC/C,QAAO,EACJ,MAAM,CACN,MAAM,MAAM,CACZ,OAAO,QAAQ,CACf,MAAM,GAAG,EAAE,CACX,KAAK,MAAS,EAAK,GAAI,aAAa,CAAC,CACrC,KAAK,GAAG;;AAab,SAAgB,EAAa,EAAE,OAAI,gBAAgC;CACjE,IAAM,IAAU,EAAiB,EAAG,EAC9B,IAAQ,IACV,EAAQ,QACN,GAAG,EAAQ,YAAY,IAAI,EAAQ,MAAM,KACzC,EAAQ,cACV,KAAA;AAEJ,QACE,kBAAC,QAAD;EAAiB;EAAW,OAAO;EAAO,cAAY;aAFvC,GAAS,WAAW,EAAW,EAAQ,YAAY,GAAG,OAGtD;EACR,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"PresenceAvatars.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/presence/PresenceAvatars.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAe1D,wBAAgB,eAAe,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,SAAS,aAAa,EAAE,CAAA;CAAE,kDA6B/E;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,EAAE,cAAc,EAAE,EAAE;IAAE,cAAc,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,2CAsBnF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"PresenceAvatars.js","names":[],"sources":["../../../src/planmagnet/presence/PresenceAvatars.tsx"],"sourcesContent":["import { Fragment } from 'react';\nimport { PersonAvatar, PersonName } from '../people/People';\nimport type { PresenceOther } from '../hooks/usePresence';\n\n/**\n * \"Also here: …\" (CWF-24) — everyone else currently present on a task/doc/roadmap/project, up to 5 initials\n * bubbles plus a \"+N\" overflow count. `others` is expected to already exclude the caller — `usePresence` does\n * that — so this never needs its own id to filter against. Renders nothing when nobody else is here: an empty\n * \"Also here:\" row would be noise, not information.\n *\n * Each bubble is a `PersonAvatar`, which already carries its own resolved-name `aria-label`/tooltip (People.tsx),\n * so wrapping this in `role=\"group\"` with a visible label is enough for the set to read sensibly to a screen\n * reader — there is no second, separately-maintained list of names to keep in sync with the bubbles.\n */\n\nconst MAX_SHOWN = 5;\n\nexport function PresenceAvatars({ others }: { others: readonly PresenceOther[] }) {\n if (others.length === 0) return null;\n const shown = others.slice(0, MAX_SHOWN);\n const overflow = others.length - shown.length;\n\n return (\n <div\n role=\"group\"\n aria-label={`Also here: ${others.length} other${others.length === 1 ? '' : 's'}`}\n data-testid=\"presence-avatars\"\n className=\"flex items-center gap-1.5\"\n >\n <span className=\"text-xs text-muted-foreground\">Also here:</span>\n <div className=\"flex -space-x-2\">\n {shown.map((entry) => (\n <PersonAvatar\n key={entry.actorId}\n id={entry.actorId}\n className=\"flex h-6 w-6 shrink-0 items-center justify-center rounded-full border-2 border-bg-surface bg-muted text-[10px] font-medium text-foreground\"\n />\n ))}\n </div>\n {overflow > 0 && (\n <span className=\"text-xs text-muted-foreground\" data-testid=\"presence-avatars-overflow\">\n +{overflow}\n </span>\n )}\n </div>\n );\n}\n\n/**\n * \"Ada is typing…\" (CWF-24), inside a comment thread. A live region (polite — a typing flip is not urgent enough\n * to interrupt) so the line appearing/disappearing/changing names is announced without extra chrome. Renders an\n * (invisible-to-sighted-users but still present) empty live region rather than nothing at all when no one is\n * typing, so the region already exists in the accessibility tree before the first announcement — inserting a\n * brand-new `aria-live` node right as it needs to speak is unreliable across screen readers.\n */\nexport function TypingLine({ typingActorIds }: { typingActorIds: readonly string[] }) {\n const [first, second] = typingActorIds;\n return (\n <p\n role=\"status\"\n aria-live=\"polite\"\n data-testid=\"presence-typing\"\n className=\"min-h-[1rem] text-xs italic text-muted-foreground\"\n >\n {typingActorIds.length === 1 && (\n <Fragment>\n <PersonName id={first} /> is typing…\n </Fragment>\n )}\n {typingActorIds.length === 2 && (\n <Fragment>\n <PersonName id={first} /> and <PersonName id={second} /> are typing…\n </Fragment>\n )}\n {typingActorIds.length > 2 && `${typingActorIds.length} people are typing…`}\n </p>\n );\n}\n"],"mappings":";;;;AAeA,IAAM,IAAY;AAElB,SAAgB,EAAgB,EAAE,aAAgD;AAChF,KAAI,EAAO,WAAW,EAAG,QAAO;CAChC,IAAM,IAAQ,EAAO,MAAM,GAAG,EAAU,EAClC,IAAW,EAAO,SAAS,EAAM;AAEvC,QACE,kBAAC,OAAD;EACE,MAAK;EACL,cAAY,cAAc,EAAO,OAAO,QAAQ,EAAO,WAAW,IAAI,KAAK;EAC3E,eAAY;EACZ,WAAU;YAJZ;GAME,kBAAC,QAAD;IAAM,WAAU;cAAgC;IAAiB,CAAA;GACjE,kBAAC,OAAD;IAAK,WAAU;cACZ,EAAM,KAAK,MACV,kBAAC,GAAD;KAEE,IAAI,EAAM;KACV,WAAU;KACV,EAHK,EAAM,QAGX,CACF;IACE,CAAA;GACL,IAAW,KACV,kBAAC,QAAD;IAAM,WAAU;IAAgC,eAAY;cAA5D,CAAwF,KACpF,EACG;;GAEL;;;AAWV,SAAgB,EAAW,EAAE,qBAAyD;CACpF,IAAM,CAAC,GAAO,KAAU;AACxB,QACE,kBAAC,KAAD;EACE,MAAK;EACL,aAAU;EACV,eAAY;EACZ,WAAU;YAJZ;GAMG,EAAe,WAAW,KACzB,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAY,IAAI,GAAS,CAAA,EAAA,cAChB,EAAA,CAAA;GAEZ,EAAe,WAAW,KACzB,kBAAC,GAAD,EAAA,UAAA;IACE,kBAAC,GAAD,EAAY,IAAI,GAAS,CAAA;;IAAK,kBAAC,GAAD,EAAY,IAAI,GAAU,CAAA;;IAC/C,EAAA,CAAA;GAEZ,EAAe,SAAS,KAAK,GAAG,EAAe,OAAO;GACrD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FeatureLinkPanels.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/product/FeatureLinkPanels.tsx"],"names":[],"mappings":"AAgDA,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAY,SAAQ,gBAAgB;IACnD,QAAQ,EAAE,gBAAgB,EAAE,CAAC;CAC9B;AAUD,wBAAgB,iBAAiB,CAAC,EAChC,SAAS,EACT,QAAQ,EACR,KAAK,GACN,EAAE;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,WAAW,EAAE,CAAC;CACtB,2CAuHA;AAoID,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAeD,wBAAgB,oBAAoB,CAAC,EACnC,SAAS,EACT,SAAS,EACT,QAAQ,EACR,QAAQ,GACT,EAAE;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,oBAAoB,EAAE,CAAC;CAClC,2CA0GA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FeatureLinkPanels.js","names":[],"sources":["../../../src/planmagnet/product/FeatureLinkPanels.tsx"],"sourcesContent":["import { useDeferredValue, useState } from 'react';\nimport { useMutation, useQuery } from '@apollo/client/react';\nimport { Badge, Button, Input } from '@burdenoff/fe-libs/ui';\nimport { Link2, ThumbsUp, X } from 'lucide-react';\nimport { useTr } from '../../shared/hooks/useTr';\nimport { usePlanMagnet, usePlanMagnetNavigate } from '../providers/PlanMagnetProvider';\nimport { ErrorLine } from '../controls/ConfirmButton';\nimport { enumLabel } from '../controls/WorkItemControls';\nimport { throwOnError } from '../utils/mutationResult';\nimport { detailPath } from '../utils/rowNavigation';\nimport { linkableRequests } from './hierarchy';\nimport {\n LINK_EPIC_TO_PRODUCT_FEATURE,\n LINK_FEATURE_REQUEST_TO_PRODUCT_FEATURE,\n PRODUCT_FEATURE_EPIC_CANDIDATES,\n PRODUCT_FEATURE_QUERIES,\n PRODUCT_FEATURE_REQUEST_CANDIDATES,\n UNLINK_EPIC_FROM_PRODUCT_FEATURE,\n UNLINK_FEATURE_REQUEST_FROM_PRODUCT_FEATURE,\n} from './hierarchyOperations';\nimport { refusalMessage } from './refusal';\n\n/**\n * The feature detail page's two link panels (PRM-01): the EPIC work items that deliver the feature (each with the\n * stories under it, through the existing parent/child relation) and the feature requests it answers. Linking and\n * unlinking only ever writes the link — the epic, its stories and the request are never changed — and a link the\n * service refuses (not an epic, another product's request, an archived feature) shows the service's own reason.\n */\n\nconst selectClass =\n 'w-full rounded-md border border-input bg-background px-3 py-2 text-sm disabled:opacity-60';\n\nconst writeOptions = { refetchQueries: PRODUCT_FEATURE_QUERIES, awaitRefetchQueries: true };\n\nfunction taskPath(id: string) {\n return `/tasks/task-detail-page?taskId=${encodeURIComponent(id)}`;\n}\n\nfunction useForbiddenText() {\n const tr = useTr();\n return tr(\n 'planmagnet.productFeatures.errors.forbiddenLinks',\n 'Your role cannot change what this feature is linked to.'\n );\n}\n\n// ─── Epics ──────────────────────────────────────────────────────────────────\n\nexport interface FeatureEpicChild {\n id: string;\n key: string;\n title: string;\n type: string;\n status: string;\n}\n\nexport interface FeatureEpic extends FeatureEpicChild {\n children: FeatureEpicChild[];\n}\n\ninterface EpicCandidate {\n id: string;\n key: string;\n title: string;\n type: string;\n productFeature: { id: string; name: string } | null;\n}\n\nexport function FeatureEpicsPanel({\n featureId,\n archived,\n epics,\n}: {\n featureId: string;\n archived: boolean;\n epics: FeatureEpic[];\n}) {\n const tr = useTr();\n const forbidden = useForbiddenText();\n const navigate = usePlanMagnetNavigate();\n const [unlink, unlinkState] = useMutation(UNLINK_EPIC_FROM_PRODUCT_FEATURE, writeOptions);\n const [removingId, setRemovingId] = useState<string | null>(null);\n const [error, setError] = useState<string | null>(null);\n\n const onUnlink = async (workItemId: string) => {\n setError(null);\n setRemovingId(workItemId);\n try {\n await throwOnError(unlink({ variables: { productFeatureId: featureId, workItemId } }));\n } catch (e) {\n setError(\n refusalMessage(\n e,\n tr('planmagnet.productFeatures.epics.errors.unlink', 'The epic could not be unlinked.'),\n forbidden\n )\n );\n } finally {\n setRemovingId(null);\n }\n };\n\n return (\n <div className=\"space-y-3\" data-testid=\"product-feature-epics\">\n <p className=\"text-sm text-muted-foreground\">\n {tr(\n 'planmagnet.productFeatures.epics.subtitle',\n 'Epics that deliver this feature. Stories reach it through their epic; unlinking an epic changes nothing about the epic or its stories.'\n )}\n </p>\n {epics.length === 0 ? (\n <p className=\"py-2 text-center text-sm text-muted-foreground\">\n {tr('planmagnet.productFeatures.epics.empty', 'No epics linked to this feature yet.')}\n </p>\n ) : (\n <ul className=\"space-y-2\">\n {epics.map((epic) => (\n <li key={epic.id} className=\"rounded-md border p-2 text-sm\" data-testid=\"feature-epic\">\n <div className=\"flex flex-wrap items-center justify-between gap-2\">\n <button\n type=\"button\"\n className=\"min-w-0 truncate text-left font-medium hover:underline\"\n onClick={() => navigate(taskPath(epic.id))}\n >\n <span className=\"mr-2 text-muted-foreground\">{epic.key}</span>\n {epic.title}\n </button>\n <div className=\"flex shrink-0 items-center gap-2\">\n <Badge variant=\"outline\" className=\"text-xs\">\n {enumLabel(epic.status)}\n </Badge>\n <Button\n size=\"sm\"\n variant=\"ghost\"\n aria-label={tr(\n 'planmagnet.productFeatures.epics.unlinkNamed',\n 'Unlink {{key}}',\n {\n key: epic.key,\n }\n )}\n disabled={unlinkState.loading}\n onClick={() => void onUnlink(epic.id)}\n data-testid=\"feature-epic-unlink\"\n >\n {removingId === epic.id ? '…' : <X className=\"h-4 w-4\" />}\n </Button>\n </div>\n </div>\n {epic.children.length === 0 ? (\n <p className=\"mt-1 pl-4 text-xs text-muted-foreground\">\n {tr(\n 'planmagnet.productFeatures.epics.noStories',\n 'No stories under this epic yet.'\n )}\n </p>\n ) : (\n <ul className=\"mt-1 space-y-1 border-l pl-4\" data-testid=\"feature-epic-stories\">\n {epic.children.map((child) => (\n <li\n key={child.id}\n className=\"flex flex-wrap items-center justify-between gap-x-2 text-xs\"\n >\n <button\n type=\"button\"\n className=\"min-w-0 truncate text-left hover:underline\"\n onClick={() => navigate(taskPath(child.id))}\n >\n <span className=\"mr-2 text-muted-foreground\">{child.key}</span>\n {child.title}\n </button>\n <span className=\"shrink-0 text-muted-foreground\">\n {enumLabel(child.type)} · {enumLabel(child.status)}\n </span>\n </li>\n ))}\n </ul>\n )}\n </li>\n ))}\n </ul>\n )}\n {error && <ErrorLine message={error} />}\n {archived ? (\n <p className=\"text-xs text-muted-foreground\">\n {tr(\n 'planmagnet.productFeatures.archivedNoLinks',\n 'This feature is archived — unarchive it to link more.'\n )}\n </p>\n ) : (\n <LinkEpicControl featureId={featureId} linkedIds={epics.map((e) => e.id)} />\n )}\n </div>\n );\n}\n\n/** Search EPIC work items only (the service refuses any other type) and link one. */\nfunction LinkEpicControl({ featureId, linkedIds }: { featureId: string; linkedIds: string[] }) {\n const tr = useTr();\n const forbidden = useForbiddenText();\n const { workspaceId } = usePlanMagnet();\n const [search, setSearch] = useState('');\n const deferred = useDeferredValue(search.trim());\n const [selectedId, setSelectedId] = useState('');\n const [error, setError] = useState<string | null>(null);\n const {\n data,\n loading,\n error: loadError,\n } = useQuery<{\n planmagnetWorkItems: { items: EpicCandidate[]; totalCount: number };\n }>(PRODUCT_FEATURE_EPIC_CANDIDATES, {\n variables: {\n workspaceId: workspaceId ?? '',\n filter: {\n type: 'EPIC',\n ...(deferred ? { search: deferred } : {}),\n ...(linkedIds.length ? { excludeIds: linkedIds } : {}),\n },\n },\n skip: !workspaceId,\n });\n const [link, linkState] = useMutation(LINK_EPIC_TO_PRODUCT_FEATURE, writeOptions);\n const candidates = data?.planmagnetWorkItems.items ?? [];\n const total = data?.planmagnetWorkItems.totalCount ?? 0;\n const selected = candidates.find((c) => c.id === selectedId) ?? null;\n\n const onLink = async () => {\n if (!selectedId) return;\n setError(null);\n try {\n await throwOnError(\n link({ variables: { productFeatureId: featureId, workItemId: selectedId } })\n );\n setSelectedId('');\n setSearch('');\n } catch (e) {\n setError(\n refusalMessage(\n e,\n tr('planmagnet.productFeatures.epics.errors.link', 'The epic could not be linked.'),\n forbidden\n )\n );\n }\n };\n\n return (\n <div className=\"space-y-2 border-t pt-3\" data-testid=\"feature-epic-link\">\n <label htmlFor={`feature-epic-select-${featureId}`} className=\"text-sm font-medium\">\n {tr('planmagnet.productFeatures.epics.linkLabel', 'Link an epic')}\n </label>\n <Input\n aria-label={tr('planmagnet.productFeatures.epics.search', 'Search epics')}\n placeholder={tr(\n 'planmagnet.productFeatures.epics.searchPlaceholder',\n 'Search epics by key or title'\n )}\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n />\n <div className=\"flex items-start gap-2\">\n <select\n id={`feature-epic-select-${featureId}`}\n className={selectClass}\n value={selectedId}\n onChange={(e) => setSelectedId(e.target.value)}\n data-testid=\"feature-epic-select\"\n >\n <option value=\"\">\n {loading && !data\n ? tr('planmagnet.productFeatures.searching', 'Searching…')\n : candidates.length\n ? tr('planmagnet.productFeatures.epics.choose', 'Choose an epic')\n : tr('planmagnet.productFeatures.epics.noMatch', 'No epic matches')}\n </option>\n {candidates.map((c) => (\n <option key={c.id} value={c.id}>\n {c.key} — {c.title}\n </option>\n ))}\n </select>\n <Button\n size=\"sm\"\n disabled={!selectedId || linkState.loading}\n onClick={() => void onLink()}\n data-testid=\"feature-epic-link-confirm\"\n >\n <Link2 className=\"mr-1 h-4 w-4\" />\n {tr('planmagnet.productFeatures.epics.link', 'Link')}\n </Button>\n </div>\n {selected?.productFeature && (\n <p className=\"text-xs text-muted-foreground\">\n {tr(\n 'planmagnet.productFeatures.epics.moves',\n '{{key}} is linked to \"{{feature}}\" — an epic belongs to one feature, so linking moves it here.',\n { key: selected.key, feature: selected.productFeature.name }\n )}\n </p>\n )}\n {loadError && (\n <ErrorLine\n message={tr(\n 'planmagnet.productFeatures.epics.errors.load',\n 'Epics could not be searched: {{message}}',\n { message: loadError.message }\n )}\n />\n )}\n {total > candidates.length && (\n <p className=\"text-xs text-muted-foreground\">\n {tr(\n 'planmagnet.productFeatures.narrow',\n 'Showing {{shown}} of {{total}} — type to narrow the list.',\n { shown: candidates.length, total }\n )}\n </p>\n )}\n {error && <ErrorLine message={error} />}\n </div>\n );\n}\n\n// ─── Feature requests ───────────────────────────────────────────────────────\n\nexport interface FeatureLinkedRequest {\n id: string;\n title: string;\n status: string;\n voteCount: number;\n productId: string | null;\n}\n\ninterface RequestCandidate {\n id: string;\n title: string;\n status: string;\n productId: string | null;\n productFeature: { id: string; name: string } | null;\n}\n\ninterface RequestCandidateList {\n items: RequestCandidate[];\n totalCount: number;\n}\n\nexport function FeatureRequestsPanel({\n featureId,\n productId,\n archived,\n requests,\n}: {\n featureId: string;\n productId: string;\n archived: boolean;\n requests: FeatureLinkedRequest[];\n}) {\n const tr = useTr();\n const forbidden = useForbiddenText();\n const navigate = usePlanMagnetNavigate();\n const [unlink, unlinkState] = useMutation(\n UNLINK_FEATURE_REQUEST_FROM_PRODUCT_FEATURE,\n writeOptions\n );\n const [removingId, setRemovingId] = useState<string | null>(null);\n const [error, setError] = useState<string | null>(null);\n\n const onUnlink = async (featureRequestId: string) => {\n setError(null);\n setRemovingId(featureRequestId);\n try {\n await throwOnError(unlink({ variables: { featureRequestId, productFeatureId: featureId } }));\n } catch (e) {\n setError(\n refusalMessage(\n e,\n tr(\n 'planmagnet.productFeatures.requests.errors.unlink',\n 'The feature request could not be unlinked.'\n ),\n forbidden\n )\n );\n } finally {\n setRemovingId(null);\n }\n };\n\n return (\n <div className=\"space-y-3\" data-testid=\"product-feature-requests\">\n <p className=\"text-sm text-muted-foreground\">\n {tr(\n 'planmagnet.productFeatures.requests.subtitle',\n 'Customer and user feedback this feature answers. A request stays a request — linking never converts or changes it.'\n )}\n </p>\n {requests.length === 0 ? (\n <p className=\"py-2 text-center text-sm text-muted-foreground\">\n {tr(\n 'planmagnet.productFeatures.requests.empty',\n 'No feature requests linked to this feature yet.'\n )}\n </p>\n ) : (\n <ul className=\"space-y-1\">\n {requests.map((request) => (\n <li\n key={request.id}\n className=\"flex flex-wrap items-center justify-between gap-2 rounded-md border p-2 text-sm\"\n data-testid=\"feature-request-row\"\n >\n <button\n type=\"button\"\n className=\"min-w-0 truncate text-left hover:underline\"\n onClick={() => navigate(detailPath('/products/feature-detail-page', request.id))}\n >\n {request.title}\n </button>\n <div className=\"flex shrink-0 items-center gap-2\">\n <span className=\"flex items-center gap-1 text-xs text-muted-foreground\">\n <ThumbsUp className=\"h-3 w-3\" />\n {request.voteCount}\n </span>\n <Badge variant=\"secondary\" className=\"text-xs\">\n {enumLabel(request.status)}\n </Badge>\n <Button\n size=\"sm\"\n variant=\"ghost\"\n aria-label={tr(\n 'planmagnet.productFeatures.requests.unlinkNamed',\n 'Unlink {{title}}',\n { title: request.title }\n )}\n disabled={unlinkState.loading}\n onClick={() => void onUnlink(request.id)}\n data-testid=\"feature-request-unlink\"\n >\n {removingId === request.id ? '…' : <X className=\"h-4 w-4\" />}\n </Button>\n </div>\n </li>\n ))}\n </ul>\n )}\n {error && <ErrorLine message={error} />}\n {archived ? (\n <p className=\"text-xs text-muted-foreground\">\n {tr(\n 'planmagnet.productFeatures.archivedNoLinks',\n 'This feature is archived — unarchive it to link more.'\n )}\n </p>\n ) : (\n <LinkRequestControl\n featureId={featureId}\n productId={productId}\n linkedIds={requests.map((r) => r.id)}\n />\n )}\n </div>\n );\n}\n\n/**\n * Search, then link one request. Offered: this product's requests, then requests with no product — the two kinds\n * the service accepts. A request of another product is never offered (the service would refuse it: link it to a\n * feature of its own product instead), and if the service still refuses a link — say the request moved product\n * meanwhile — its reason is shown as is.\n */\nfunction LinkRequestControl({\n featureId,\n productId,\n linkedIds,\n}: {\n featureId: string;\n productId: string;\n linkedIds: string[];\n}) {\n const tr = useTr();\n const forbidden = useForbiddenText();\n const { workspaceId } = usePlanMagnet();\n const [search, setSearch] = useState('');\n const deferred = useDeferredValue(search.trim());\n const [selectedId, setSelectedId] = useState('');\n const [error, setError] = useState<string | null>(null);\n const {\n data,\n loading,\n error: loadError,\n } = useQuery<{\n sameProduct: RequestCandidateList;\n anyProduct: RequestCandidateList;\n }>(PRODUCT_FEATURE_REQUEST_CANDIDATES, {\n variables: {\n workspaceId: workspaceId ?? '',\n sameProduct: { productId, ...(deferred ? { search: deferred } : {}) },\n anyProduct: deferred ? { search: deferred } : undefined,\n },\n skip: !workspaceId,\n });\n const [link, linkState] = useMutation(LINK_FEATURE_REQUEST_TO_PRODUCT_FEATURE, writeOptions);\n const sameProduct = data?.sameProduct.items ?? [];\n // The service has no \"no product\" filter: requests without one come from the workspace-wide search, so\n // only that page is checked — and the note below says when there is more to narrow down.\n const unassigned = (data?.anyProduct.items ?? []).filter((r) => r.productId === null);\n const candidates = linkableRequests(sameProduct, unassigned, productId, linkedIds);\n const selected = candidates.find((c) => c.id === selectedId) ?? null;\n const truncated =\n !!data &&\n (data.sameProduct.totalCount > data.sameProduct.items.length ||\n data.anyProduct.totalCount > data.anyProduct.items.length);\n\n const onLink = async () => {\n if (!selectedId) return;\n setError(null);\n try {\n await throwOnError(\n link({ variables: { featureRequestId: selectedId, productFeatureId: featureId } })\n );\n setSelectedId('');\n setSearch('');\n } catch (e) {\n setError(\n refusalMessage(\n e,\n tr(\n 'planmagnet.productFeatures.requests.errors.link',\n 'The feature request could not be linked.'\n ),\n forbidden\n )\n );\n }\n };\n\n const own = candidates.filter((c) => c.productId === productId);\n const none = candidates.filter((c) => c.productId === null);\n\n return (\n <div className=\"space-y-2 border-t pt-3\" data-testid=\"feature-request-link\">\n <label htmlFor={`feature-request-select-${featureId}`} className=\"text-sm font-medium\">\n {tr('planmagnet.productFeatures.requests.linkLabel', 'Link a feature request')}\n </label>\n <Input\n aria-label={tr('planmagnet.productFeatures.requests.search', 'Search feature requests')}\n placeholder={tr(\n 'planmagnet.productFeatures.requests.searchPlaceholder',\n 'Search feature requests by title'\n )}\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n />\n <div className=\"flex items-start gap-2\">\n <select\n id={`feature-request-select-${featureId}`}\n className={selectClass}\n value={selectedId}\n onChange={(e) => setSelectedId(e.target.value)}\n data-testid=\"feature-request-select\"\n >\n <option value=\"\">\n {loading && !data\n ? tr('planmagnet.productFeatures.searching', 'Searching…')\n : candidates.length\n ? tr('planmagnet.productFeatures.requests.choose', 'Choose a feature request')\n : tr('planmagnet.productFeatures.requests.noMatch', 'No feature request matches')}\n </option>\n {own.length > 0 && (\n <optgroup\n label={tr('planmagnet.productFeatures.requests.groupOwn', 'From this product')}\n >\n {own.map((c) => (\n <option key={c.id} value={c.id}>\n {c.title}\n </option>\n ))}\n </optgroup>\n )}\n {none.length > 0 && (\n <optgroup\n label={tr('planmagnet.productFeatures.requests.groupNone', 'Without a product')}\n >\n {none.map((c) => (\n <option key={c.id} value={c.id}>\n {c.title}\n </option>\n ))}\n </optgroup>\n )}\n </select>\n <Button\n size=\"sm\"\n disabled={!selectedId || linkState.loading}\n onClick={() => void onLink()}\n data-testid=\"feature-request-link-confirm\"\n >\n <Link2 className=\"mr-1 h-4 w-4\" />\n {tr('planmagnet.productFeatures.requests.link', 'Link')}\n </Button>\n </div>\n {selected?.productFeature && (\n <p className=\"text-xs text-muted-foreground\">\n {tr(\n 'planmagnet.productFeatures.requests.moves',\n 'This request points at \"{{feature}}\" — a request points at one feature, so linking moves it here.',\n { feature: selected.productFeature.name }\n )}\n </p>\n )}\n {selected && selected.productId === null && (\n <p className=\"text-xs text-muted-foreground\">\n {tr(\n 'planmagnet.productFeatures.requests.noProduct',\n 'This request has no product. Linking does not set one.'\n )}\n </p>\n )}\n {loadError && (\n <ErrorLine\n message={tr(\n 'planmagnet.productFeatures.requests.errors.load',\n 'Feature requests could not be searched: {{message}}',\n { message: loadError.message }\n )}\n />\n )}\n {truncated && (\n <p className=\"text-xs text-muted-foreground\">\n {tr(\n 'planmagnet.productFeatures.requests.narrow',\n 'Only the first matches are listed — type to narrow the list.'\n )}\n </p>\n )}\n {error && <ErrorLine message={error} />}\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ProductControls.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/product/ProductControls.tsx"],"names":[],"mappings":"AA6BA;;;;;;;GAOG;AAIH,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AACD,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AACD,MAAM,WAAW,wBAAwB;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AACD,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AACD,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,yEAAyE;AACzE,eAAO,MAAM,eAAe,UAA2D,CAAC;AA0BxF,wBAAgB,oBAAoB,CAAC,EACnC,SAAS,EACT,IAAI,EACJ,UAAU,GACX,EAAE;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B,2CAyEA;AA8BD,wBAAgB,oBAAoB,CAAC,EACnC,SAAS,EACT,QAAQ,GACT,EAAE;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,iBAAiB,EAAE,CAAC;CAC/B,2CA+DA;AA0JD,wBAAgB,oBAAoB,CAAC,EACnC,SAAS,EACT,QAAQ,GACT,EAAE;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,iBAAiB,EAAE,CAAC;CAC/B,2CAqEA;AAkKD,wBAAgB,2BAA2B,CAAC,EAC1C,SAAS,EACT,eAAe,GAChB,EAAE;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,wBAAwB,EAAE,CAAC;CAC7C,2CAuEA;AAyJD,wBAAgB,sBAAsB,CAAC,EACrC,SAAS,EACT,UAAU,GACX,EAAE;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,mBAAmB,EAAE,CAAC;CACnC,2CAuEA;AA6ID,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AA4FD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,kBAAkB,CAAA;CAAE,2CA0J7E;AAiBD;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,EACtC,SAAS,EACT,WAAW,GACZ,EAAE;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,oBAAoB,EAAE,CAAC;CACrC,2CA4FA"}
|