@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":"ShareDialog.js","names":[],"sources":["../../../src/planmagnet/reports/ShareDialog.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { useMutation, useQuery } from '@apollo/client/react';\nimport {\n Badge,\n Button,\n ResponsiveDialog,\n ResponsiveDialogContent,\n ResponsiveDialogDescription,\n ResponsiveDialogFooter,\n ResponsiveDialogHeader,\n ResponsiveDialogTitle,\n ResponsiveDialogTrigger,\n Input,\n Label,\n} from '@burdenoff/fe-libs/ui';\nimport { Check, Copy, Share2 } from 'lucide-react';\nimport { copyTextToClipboard } from '@burdenoff/fe-libs/sharing';\nimport { ConfirmButton, ErrorLine } from '../controls/ConfirmButton';\nimport { mutationErrorMessage } from '../utils/graphqlErrors';\nimport { throwOnError } from '../utils/mutationResult';\nimport { CREATE_REPORT_SHARE, LIST_REPORT_SHARES, REVOKE_REPORT_SHARE } from './reportGraphql';\nimport { sharedReportLink } from './sharedReportRoute';\nimport type { ReportShare } from './reportModel';\n\n/** Share links (ANR-16), owner-only — a report's owner creates a link to one persisted run; anyone with the\n * link (and the password, if set) can view that run's snapshot read-only at `/public/report/<token>`, no\n * workspace login required. The raw token is shown exactly once, right after creation. */\n\nconst DAY_MS = 86_400_000;\nconst DEFAULT_EXPIRY_DAYS = 7;\nconst MAX_EXPIRY_DAYS = 90;\n\nfunction dateInputValue(daysFromNow: number): string {\n return new Date(Date.now() + daysFromNow * DAY_MS).toISOString().slice(0, 10);\n}\n\nfunction formatDate(iso: string): string {\n return new Date(iso).toLocaleString();\n}\n\nexport function ShareDialog({ reportId, runId }: { reportId: string; runId: string | null }) {\n const [open, setOpen] = useState(false);\n const [expiresAt, setExpiresAt] = useState(() => dateInputValue(DEFAULT_EXPIRY_DAYS));\n const [password, setPassword] = useState('');\n const [watermark, setWatermark] = useState('');\n const [error, setError] = useState<string | null>(null);\n const [justCreated, setJustCreated] = useState<ReportShare | null>(null);\n const [copied, setCopied] = useState(false);\n\n const shares = useQuery<{ planmagnetReportShares: ReportShare[] }>(LIST_REPORT_SHARES, {\n variables: { reportId },\n skip: !open,\n });\n const [createShare, createState] = useMutation(CREATE_REPORT_SHARE, {\n refetchQueries: [{ query: LIST_REPORT_SHARES, variables: { reportId } }],\n });\n const [revokeShare] = useMutation(REVOKE_REPORT_SHARE, {\n refetchQueries: [{ query: LIST_REPORT_SHARES, variables: { reportId } }],\n });\n\n const handleCreate = async () => {\n if (!runId) return;\n setError(null);\n setJustCreated(null);\n try {\n const result = await throwOnError(\n createShare({\n variables: {\n runId,\n input: {\n expiresAt: `${expiresAt}T23:59:59.999Z`,\n password: password.trim() || undefined,\n watermark: watermark.trim() || undefined,\n },\n },\n })\n );\n const share = (result.data as { planmagnetCreateReportShare?: ReportShare } | undefined)\n ?.planmagnetCreateReportShare;\n if (share) {\n setJustCreated(share);\n setCopied(false);\n setPassword('');\n setWatermark('');\n }\n } catch (e) {\n setError(mutationErrorMessage(e, 'The share link could not be created.'));\n }\n };\n\n const handleRevoke = async (id: string) => {\n setError(null);\n try {\n await throwOnError(revokeShare({ variables: { id } }));\n if (justCreated?.id === id) setJustCreated(null);\n } catch (e) {\n setError(mutationErrorMessage(e, 'The share could not be revoked.'));\n }\n };\n\n const copyLink = async (token: string) => {\n try {\n await copyTextToClipboard(sharedReportLink(token));\n setCopied(true);\n } catch {\n setError('Could not copy — copy the link manually.');\n }\n };\n\n const list = shares.data?.planmagnetReportShares ?? [];\n\n /** Every way of closing (the footer button, the X, Escape, an outside click) goes through here, so the share\n * token shown once after creation can never reappear when the dialog is reopened. Setting `open` directly on\n * the controlled dialog does not call `onOpenChange`, which is how the footer button used to skip the reset. */\n const close = () => {\n setOpen(false);\n setJustCreated(null);\n setError(null);\n };\n\n return (\n <ResponsiveDialog open={open} onOpenChange={(next) => (next ? setOpen(true) : close())}>\n <ResponsiveDialogTrigger asChild>\n <Button size=\"sm\" variant=\"outline\" data-testid=\"report-share\">\n <Share2 className=\"mr-1 h-4 w-4\" />\n Share\n </Button>\n </ResponsiveDialogTrigger>\n <ResponsiveDialogContent className=\"max-h-[85vh] overflow-y-auto sm:max-w-lg\">\n <ResponsiveDialogHeader>\n <ResponsiveDialogTitle>Share this report</ResponsiveDialogTitle>\n <ResponsiveDialogDescription>\n Anyone with the link can view the most recently shared run, read-only, without signing\n in.\n </ResponsiveDialogDescription>\n </ResponsiveDialogHeader>\n\n {!runId && (\n <p className=\"text-sm text-muted-foreground\">\n Run this report at least once before sharing it — a share links to one specific run.\n </p>\n )}\n\n {runId && (\n <div className=\"space-y-3 rounded-md border border-border p-3\">\n <div>\n <Label htmlFor=\"share-expiry\">Expires</Label>\n <Input\n id=\"share-expiry\"\n type=\"date\"\n className=\"mt-1\"\n value={expiresAt}\n min={dateInputValue(1)}\n max={dateInputValue(MAX_EXPIRY_DAYS)}\n onChange={(e) => setExpiresAt(e.target.value)}\n />\n </div>\n <div>\n <Label htmlFor=\"share-password\">Password (optional)</Label>\n <Input\n id=\"share-password\"\n type=\"password\"\n className=\"mt-1\"\n value={password}\n onChange={(e) => setPassword(e.target.value)}\n placeholder=\"Leave blank for no password\"\n />\n </div>\n <div>\n <Label htmlFor=\"share-watermark\">Watermark text (optional)</Label>\n <Input\n id=\"share-watermark\"\n className=\"mt-1\"\n value={watermark}\n onChange={(e) => setWatermark(e.target.value)}\n placeholder={`Shared via PlanMagnet on ${new Date().toLocaleDateString()}`}\n />\n </div>\n <Button\n size=\"sm\"\n onClick={handleCreate}\n disabled={createState.loading}\n data-testid=\"report-share-create\"\n >\n {createState.loading ? 'Creating…' : 'Create share link'}\n </Button>\n </div>\n )}\n\n {justCreated?.token && (\n <div\n className=\"space-y-2 rounded-md border border-primary bg-primary/5 p-3\"\n data-testid=\"report-share-link\"\n >\n <p className=\"text-sm font-medium\">Link created — copy it now.</p>\n <p className=\"text-xs text-muted-foreground\">\n You will not see this link again. If you lose it, revoke this share and create a new\n one.\n </p>\n <div className=\"flex items-center gap-2\">\n <Input readOnly value={sharedReportLink(justCreated.token)} className=\"text-xs\" />\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={() => copyLink(justCreated.token as string)}\n >\n {copied ? <Check className=\"h-4 w-4\" /> : <Copy className=\"h-4 w-4\" />}\n {copied ? 'Copied' : 'Copy'}\n </Button>\n </div>\n </div>\n )}\n\n {error && <ErrorLine message={error} />}\n\n <div className=\"space-y-2\" data-testid=\"report-shares\">\n <h3 className=\"text-sm font-semibold\">Existing shares</h3>\n {shares.loading && !shares.data ? (\n <p className=\"text-sm text-muted-foreground\">Loading…</p>\n ) : list.length === 0 ? (\n <p className=\"text-sm text-muted-foreground\">No shares yet.</p>\n ) : (\n <ul className=\"space-y-2\">\n {list.map((share) => {\n const revoked = !!share.revokedAt;\n const expired =\n !revoked && new Date(share.expiresAt).getTime() < new Date().getTime();\n return (\n <li\n key={share.id}\n className=\"flex flex-wrap items-center justify-between gap-2 rounded-md border border-border p-2 text-xs\"\n >\n <div className=\"space-y-0.5\">\n <div className=\"flex items-center gap-1.5\">\n <Badge variant={revoked ? 'secondary' : expired ? 'warning' : 'success'}>\n {revoked ? 'Revoked' : expired ? 'Expired' : 'Active'}\n </Badge>\n {share.hasPassword && <Badge variant=\"outline\">Password</Badge>}\n </div>\n <p className=\"text-muted-foreground\">\n Created {formatDate(share.createdAt)} · Expires{' '}\n {formatDate(share.expiresAt)}\n </p>\n <p className=\"text-muted-foreground\">\n Accessed {share.accessCount} time{share.accessCount === 1 ? '' : 's'}\n {share.lastAccessedAt ? ` · last ${formatDate(share.lastAccessedAt)}` : ''}\n </p>\n </div>\n {!revoked && (\n <ConfirmButton\n label=\"Revoke\"\n icon={null}\n title=\"Revoke this share?\"\n description=\"Anyone with this link loses access immediately. This cannot be undone.\"\n confirmLabel=\"Revoke\"\n destructive\n variant=\"outline\"\n disabled={false}\n onConfirm={() => void handleRevoke(share.id)}\n />\n )}\n </li>\n );\n })}\n </ul>\n )}\n </div>\n\n <ResponsiveDialogFooter>\n <Button variant=\"outline\" onClick={close}>\n Close\n </Button>\n </ResponsiveDialogFooter>\n </ResponsiveDialogContent>\n </ResponsiveDialog>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SharedReportPage.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/reports/SharedReportPage.tsx"],"names":[],"mappings":"AAyFA,wBAAgB,gBAAgB,CAAC,EAAE,aAAa,EAAE,GAAE;IAAE,aAAa,CAAC,EAAE,MAAM,CAAA;CAAO,2CA4JlF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SharedReportPage.js","names":[],"sources":["../../../src/planmagnet/reports/SharedReportPage.tsx"],"sourcesContent":["import { useCallback, useEffect, useState, type ReactNode } from 'react';\nimport { useParams } from 'react-router';\nimport { Button, Input, Label } from '@burdenoff/fe-libs/ui';\nimport { Lock, ShieldOff } from 'lucide-react';\nimport { PrintReportView } from './PrintReportView';\nimport type { ReportWidget, SharedReport } from './reportModel';\n\n/**\n * The public, unauthenticated view a share link resolves to (ANR-17). Exported standalone from the package\n * index so the host app can mount it OUTSIDE its auth guard/nav chrome, on its own top-level route\n * (`sharedReportRoute.ts`'s `SHARED_REPORT_ROUTE_PATH`) — it never touches `PlanMagnetProvider`/`usePlanMagnet`\n * (there is no workspace/actor context here) and issues a plain, unauthenticated `fetch` to the same\n * `/workspaces/graphql` path `PlanMagnetProvider.tsx` builds its Apollo client's `HttpLink` from — the viewer's\n * own token, if this happens to render inside an authenticated session, is never read or attached.\n *\n * `planmagnetSharedReport` carries no widget title/type (`PlanmagnetSharedReport`'s own schema doc: \"never any\n * actor id beyond what the snapshot's widget data already shows\" — deliberately minimal). Each result is given\n * a synthetic `CHART`-typed widget so `ReportWidgetRenderer` picks the richest generic presentation it can\n * (a chart when the data supports one, falling back to KPI tiles or its accessible data table otherwise).\n */\n\nconst QUERY = `\n query PublicPlanmagnetSharedReport($token: String!, $password: String) {\n planmagnetSharedReport(token: $token, password: $password) {\n reportName\n generatedAt\n watermark\n widgets {\n widgetId\n source\n status\n message\n result\n }\n }\n }\n`;\n\ninterface FetchResult {\n data: SharedReport | null;\n /** The i18nKey of the one GraphQL error, when there was one (see report-share.service.ts). */\n errorKey: string | null;\n}\n\n/** `report-share.service.ts`'s own error keys for the two refusals this page must tell apart from a plain\n * \"invalid or expired\" — same message/key for \"no password yet\" and \"wrong password\" (the server never\n * distinguishes the two), so this page tracks locally whether a password was already tried. */\nconst CREDENTIAL_REQUIRED_KEY = 'reportShare.errors.credentialRequired';\nconst RATE_LIMITED_KEY = 'reportShare.errors.tooManyAttempts';\n\nasync function fetchSharedReport(\n apiGatewayUrl: string | undefined,\n token: string,\n password: string\n): Promise<FetchResult> {\n const endpoint = `${apiGatewayUrl ?? ''}/workspaces/graphql`;\n const response = await fetch(endpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ query: QUERY, variables: { token, password: password || null } }),\n });\n const body = (await response.json().catch(() => null)) as {\n data?: { planmagnetSharedReport: SharedReport | null };\n errors?: { message: string; extensions?: { i18nKey?: string } }[];\n } | null;\n const errorKey =\n body?.errors?.[0]?.extensions?.i18nKey ?? (body?.errors?.length ? 'unknown' : null);\n return { data: body?.data?.planmagnetSharedReport ?? null, errorKey };\n}\n\n/** Every result gets a synthetic `CHART` widget — see this file's header. */\nfunction syntheticWidgets(report: SharedReport): ReportWidget[] {\n return report.widgets.map((w, index) => ({\n id: w.widgetId,\n type: 'CHART',\n title: `Widget ${index + 1}`,\n source: w.source,\n params: {},\n layout: { x: 0, y: 0, w: 12, h: 4 },\n }));\n}\n\ntype ViewState =\n | { kind: 'loading' }\n | { kind: 'needsPassword'; wrong: boolean }\n | { kind: 'rateLimited' }\n | { kind: 'invalid' }\n | { kind: 'ready'; report: SharedReport };\n\nexport function SharedReportPage({ apiGatewayUrl }: { apiGatewayUrl?: string } = {}) {\n const { token } = useParams<{ token: string }>();\n const [state, setState] = useState<ViewState>({ kind: 'loading' });\n const [password, setPassword] = useState('');\n const [submitting, setSubmitting] = useState(false);\n\n /** Maps one `fetchSharedReport` outcome to the view state — shared by the initial load below and the\n * password-retry submit handler further down, so the two ways of arriving at a result agree exactly. */\n const applyResult = useCallback(\n (data: SharedReport | null, errorKey: string | null, triedPassword: boolean) => {\n if (data) {\n setState({ kind: 'ready', report: data });\n } else if (errorKey === CREDENTIAL_REQUIRED_KEY) {\n setState({ kind: 'needsPassword', wrong: triedPassword });\n } else if (errorKey === RATE_LIMITED_KEY) {\n setState({ kind: 'rateLimited' });\n } else {\n setState({ kind: 'invalid' });\n }\n },\n []\n );\n\n // The initial, unauthenticated (no password) load. Its only `setState` calls happen after the `await` —\n // matching `sprints/SprintControls.tsx`'s established pattern for an effect that fetches — so there is\n // nothing to reset to \"loading\" beforehand: the `useState` above already starts in that state.\n useEffect(() => {\n // No token at all (a misconfigured host route) renders as invalid directly from `token` below, without\n // this effect ever running a fetch or touching state.\n if (!token) return;\n let cancelled = false;\n (async () => {\n const { data, errorKey } = await fetchSharedReport(apiGatewayUrl, token, '');\n if (cancelled) return;\n applyResult(data, errorKey, false);\n })().catch(() => {\n if (!cancelled) setState({ kind: 'invalid' });\n });\n return () => {\n cancelled = true;\n };\n }, [token, apiGatewayUrl, applyResult]);\n\n // The password-retry path: an event handler (the form's `onSubmit` below), not an effect, so freely setting\n // `submitting` synchronously here is unrestricted.\n const submitPassword = async (withPassword: string) => {\n if (!token) return;\n setSubmitting(true);\n try {\n const { data, errorKey } = await fetchSharedReport(apiGatewayUrl, token, withPassword);\n applyResult(data, errorKey, true);\n } catch {\n setState({ kind: 'invalid' });\n } finally {\n setSubmitting(false);\n }\n };\n\n // No token at all (a misconfigured host route) renders exactly like an invalid/expired link — checked here,\n // once, rather than mixed into the `state.kind` checks below, so those narrow `state`'s discriminated union\n // cleanly (a compound `token && state.kind === …` guard does not let TypeScript conclude anything about\n // `state.kind` once `token` itself is later known to be truthy).\n if (!token) {\n return (\n <SharedReportShell>\n <div className=\"flex flex-col items-center gap-2 text-center\" data-testid=\"shared-report\">\n <ShieldOff className=\"h-8 w-8 text-muted-foreground\" aria-hidden={true} />\n <p className=\"text-sm text-muted-foreground\">This link is invalid or has expired.</p>\n </div>\n </SharedReportShell>\n );\n }\n\n if (state.kind === 'loading') {\n return (\n <SharedReportShell>\n <p className=\"text-sm text-muted-foreground\">Loading…</p>\n </SharedReportShell>\n );\n }\n\n if (state.kind === 'invalid') {\n return (\n <SharedReportShell>\n <div className=\"flex flex-col items-center gap-2 text-center\" data-testid=\"shared-report\">\n <ShieldOff className=\"h-8 w-8 text-muted-foreground\" aria-hidden={true} />\n <p className=\"text-sm text-muted-foreground\">This link is invalid or has expired.</p>\n </div>\n </SharedReportShell>\n );\n }\n\n if (state.kind === 'rateLimited') {\n return (\n <SharedReportShell>\n <div className=\"flex flex-col items-center gap-2 text-center\" data-testid=\"shared-report\">\n <Lock className=\"h-8 w-8 text-muted-foreground\" aria-hidden={true} />\n <p className=\"text-sm text-muted-foreground\">Too many attempts. Try again later.</p>\n </div>\n </SharedReportShell>\n );\n }\n\n if (state.kind === 'needsPassword') {\n return (\n <SharedReportShell>\n <form\n className=\"mx-auto max-w-xs space-y-3\"\n data-testid=\"shared-report\"\n onSubmit={(e) => {\n e.preventDefault();\n void submitPassword(password);\n }}\n >\n <div className=\"flex flex-col items-center gap-2 text-center\">\n <Lock className=\"h-8 w-8 text-muted-foreground\" aria-hidden={true} />\n <p className=\"text-sm\">\n {state.wrong\n ? \"That password didn't work — try again.\"\n : 'This report is password-protected.'}\n </p>\n </div>\n <div>\n <Label htmlFor=\"shared-report-password\">Password</Label>\n <Input\n id=\"shared-report-password\"\n type=\"password\"\n className=\"mt-1\"\n autoFocus\n value={password}\n onChange={(e) => setPassword(e.target.value)}\n aria-invalid={state.wrong}\n data-testid=\"shared-report-password\"\n />\n </div>\n <Button type=\"submit\" className=\"w-full\" disabled={submitting || !password}>\n {submitting ? 'Checking…' : 'View report'}\n </Button>\n </form>\n </SharedReportShell>\n );\n }\n\n const widgets = syntheticWidgets(state.report);\n const results = new Map(state.report.widgets.map((w) => [w.widgetId, w]));\n\n return (\n <PrintReportView\n reportName={state.report.reportName}\n generatedAt={state.report.generatedAt}\n watermark={state.report.watermark}\n widgets={widgets}\n results={results}\n onPrintNow={() => window.print()}\n />\n );\n}\n\n/** No workspace chrome, no links into the app — just a centered card, for every non-\"ready\" state. */\nfunction SharedReportShell({ children }: { children: ReactNode }) {\n return (\n <div className=\"flex min-h-screen items-center justify-center bg-background p-6 text-foreground\">\n <div className=\"w-full max-w-sm rounded-lg border border-border p-6\">\n <p className=\"mb-4 text-center text-xs font-semibold uppercase tracking-wide text-primary\">\n PlanMagnet\n </p>\n {children}\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"WidgetEditorDialog.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/reports/WidgetEditorDialog.tsx"],"names":[],"mappings":"AAmBA,OAAO,EAOL,KAAK,YAAY,EAElB,MAAM,eAAe,CAAC;AAkSvB,wBAAgB,kBAAkB,CAAC,EACjC,IAAI,EACJ,YAAY,EACZ,MAAM,EACN,MAAM,GACP,EAAE;IACD,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,8DAA8D;IAC9D,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC;CACxC,2CAoBA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"WidgetEditorDialog.js","names":[],"sources":["../../../src/planmagnet/reports/WidgetEditorDialog.tsx"],"sourcesContent":["import { useId, useState } from 'react';\nimport {\n Button,\n ResponsiveDialog,\n ResponsiveDialogContent,\n ResponsiveDialogDescription,\n ResponsiveDialogFooter,\n ResponsiveDialogHeader,\n ResponsiveDialogTitle,\n Input,\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectTrigger,\n SelectValue,\n} from '@burdenoff/fe-libs/ui';\nimport { ProjectSelect, SprintSelect, TeamSelect } from '../controls/Pickers';\nimport {\n PARAM_LABELS,\n REPORT_SOURCE_SPECS,\n SOURCE_GROUPS,\n WIDGET_TYPES,\n newWidgetId,\n type ReportSource,\n type ReportWidget,\n type WidgetType,\n} from './reportModel';\n\n/**\n * Add/edit one widget's type, source and params (ANR-13). Layout (position/size) is handled by the canvas'\n * own reorder/resize controls, not here — this dialog only ever writes `type`/`title`/`source`/`params`.\n *\n * Params shown are exactly `REPORT_SOURCE_SPECS[source].allowedParams` — switching source drops any param the\n * new source doesn't use, the same normalisation the server's `assertReportDefinition` performs, so what this\n * dialog produces always passes without a round trip.\n *\n * The form's fields (`WidgetEditorForm`) are only ever rendered while `open` is true, so their `useState`\n * initial values — computed straight from `widget`, once, on mount — are always fresh for whichever widget was\n * just opened; there is no effect resyncing them on every `widget`/`open` change (see this file's own\n * `set-state-in-effect` history: this component used to reset its fields via a `useEffect`, which the React\n * Compiler ESLint rule flags as exactly the derived-state anti-pattern the mount/unmount-driven reset here\n * avoids).\n */\n\nconst WIDGET_TYPE_LABELS: Record<WidgetType, string> = {\n KPI: 'KPI tiles',\n CHART: 'Chart',\n TABLE: 'Table',\n TEXT: 'Section header (no data)',\n};\n\nfunction paramsForSource(\n source: ReportSource,\n previous: ReportWidget['params']\n): ReportWidget['params'] {\n const allowed = new Set(REPORT_SOURCE_SPECS[source].allowedParams);\n const next: ReportWidget['params'] = {};\n if (allowed.has('projectId') && previous.projectId) next.projectId = previous.projectId;\n if (allowed.has('sprintId') && previous.sprintId) next.sprintId = previous.sprintId;\n if (allowed.has('teamId') && previous.teamId) next.teamId = previous.teamId;\n if (allowed.has('from') && previous.from) next.from = previous.from;\n if (allowed.has('to') && previous.to) next.to = previous.to;\n if (allowed.has('limit') && previous.limit) next.limit = previous.limit;\n return next;\n}\n\nfunction WidgetEditorForm({\n widget,\n onCancel,\n onSave,\n}: {\n widget: ReportWidget | null;\n onCancel: () => void;\n onSave: (widget: ReportWidget) => void;\n}) {\n const titleId = useId();\n const [type, setType] = useState<WidgetType>(widget?.type ?? 'TABLE');\n const [source, setSource] = useState<ReportSource>(widget?.source ?? 'WORK_ITEMS');\n const [title, setTitle] = useState(widget?.title ?? REPORT_SOURCE_SPECS.WORK_ITEMS.label);\n const [params, setParams] = useState<ReportWidget['params']>(widget?.params ?? {});\n const [touched, setTouched] = useState(false);\n\n const spec = REPORT_SOURCE_SPECS[source];\n const titleInvalid = touched && !title.trim();\n const limitInvalid =\n touched &&\n params.limit !== undefined &&\n params.limit !== null &&\n (!Number.isInteger(params.limit) || params.limit < 1);\n const canSave = title.trim().length > 0 && !limitInvalid;\n\n const handleSourceChange = (next: ReportSource) => {\n setSource(next);\n setParams((prev) => paramsForSource(next, prev));\n // A freshly-typed custom title is kept; an untouched default title follows the source so \"Add widget\" ->\n // pick a source still shows a sensible title without the user having to type one.\n setTitle((prev) =>\n !widget && (prev === '' || prev === spec.label) ? REPORT_SOURCE_SPECS[next].label : prev\n );\n };\n\n const setParam = <K extends keyof ReportWidget['params']>(\n key: K,\n value: ReportWidget['params'][K]\n ) => {\n setParams((prev) => ({ ...prev, [key]: value }));\n };\n\n const handleSave = () => {\n setTouched(true);\n if (!title.trim() || limitInvalid) return;\n const id = widget?.id ?? newWidgetId();\n onSave({\n id,\n type,\n title: title.trim(),\n source,\n params,\n layout: widget?.layout ?? { x: 0, y: 0, w: 6, h: 4 },\n });\n };\n\n return (\n <>\n <ResponsiveDialogHeader>\n <ResponsiveDialogTitle>{widget ? 'Edit widget' : 'Add widget'}</ResponsiveDialogTitle>\n <ResponsiveDialogDescription>\n Choose what this widget shows. Only the fields its data source reads are asked for.\n </ResponsiveDialogDescription>\n </ResponsiveDialogHeader>\n\n <div className=\"space-y-4\">\n <div>\n <label htmlFor={`${titleId}-type`} className=\"text-sm font-medium\">\n Widget type\n </label>\n <Select value={type} onValueChange={(v) => setType(v as WidgetType)}>\n <SelectTrigger id={`${titleId}-type`} className=\"mt-1\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {WIDGET_TYPES.map((t) => (\n <SelectItem key={t} value={t}>\n {WIDGET_TYPE_LABELS[t]}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n\n {type !== 'TEXT' && (\n <div>\n <label htmlFor={`${titleId}-source`} className=\"text-sm font-medium\">\n Data source\n </label>\n <Select value={source} onValueChange={(v) => handleSourceChange(v as ReportSource)}>\n <SelectTrigger id={`${titleId}-source`} className=\"mt-1\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {SOURCE_GROUPS.map(({ group, sources }) => (\n <SelectGroup key={group}>\n <SelectLabel>{group}</SelectLabel>\n {sources.map((s) => (\n <SelectItem key={s} value={s}>\n {REPORT_SOURCE_SPECS[s].label}\n </SelectItem>\n ))}\n </SelectGroup>\n ))}\n </SelectContent>\n </Select>\n <p className=\"mt-1 text-xs text-muted-foreground\">{spec.description}</p>\n </div>\n )}\n\n <div>\n <label htmlFor={`${titleId}-title`} className=\"text-sm font-medium\">\n Title\n </label>\n <Input\n id={`${titleId}-title`}\n className=\"mt-1\"\n value={title}\n onChange={(e) => setTitle(e.target.value)}\n aria-invalid={titleInvalid}\n />\n {titleInvalid && (\n <p className=\"mt-1 text-xs text-destructive\">Give this widget a title.</p>\n )}\n </div>\n\n {type !== 'TEXT' && spec.allowedParams.length > 0 && (\n <fieldset className=\"space-y-3 rounded-md border border-border p-3\">\n <legend className=\"px-1 text-xs font-medium text-muted-foreground\">Parameters</legend>\n {spec.allowedParams.includes('projectId') && (\n <div>\n <label htmlFor={`${titleId}-projectId`} className=\"text-xs font-medium\">\n {PARAM_LABELS.projectId}\n </label>\n <ProjectSelect\n id={`${titleId}-projectId`}\n value={params.projectId ?? ''}\n onChange={(v) => setParam('projectId', v || undefined)}\n noneLabel=\"Not set\"\n />\n </div>\n )}\n {spec.allowedParams.includes('sprintId') && (\n <div>\n <label htmlFor={`${titleId}-sprintId`} className=\"text-xs font-medium\">\n {PARAM_LABELS.sprintId}\n </label>\n <SprintSelect\n id={`${titleId}-sprintId`}\n projectId={params.projectId ?? undefined}\n value={params.sprintId ?? ''}\n onChange={(v) => setParam('sprintId', v || undefined)}\n noneLabel=\"Not set\"\n />\n </div>\n )}\n {spec.allowedParams.includes('teamId') && (\n <div>\n <label htmlFor={`${titleId}-teamId`} className=\"text-xs font-medium\">\n {PARAM_LABELS.teamId}\n </label>\n <TeamSelect\n id={`${titleId}-teamId`}\n value={params.teamId ?? ''}\n onChange={(v) => setParam('teamId', v || undefined)}\n noneLabel=\"Not set\"\n />\n </div>\n )}\n {(spec.allowedParams.includes('from') || spec.allowedParams.includes('to')) && (\n <div className=\"grid grid-cols-2 gap-2\">\n {spec.allowedParams.includes('from') && (\n <div>\n <label htmlFor={`${titleId}-from`} className=\"text-xs font-medium\">\n {PARAM_LABELS.from}\n </label>\n <Input\n id={`${titleId}-from`}\n type=\"date\"\n className=\"mt-1\"\n value={params.from ? params.from.slice(0, 10) : ''}\n onChange={(e) =>\n setParam(\n 'from',\n e.target.value ? `${e.target.value}T00:00:00.000Z` : undefined\n )\n }\n />\n </div>\n )}\n {spec.allowedParams.includes('to') && (\n <div>\n <label htmlFor={`${titleId}-to`} className=\"text-xs font-medium\">\n {PARAM_LABELS.to}\n </label>\n <Input\n id={`${titleId}-to`}\n type=\"date\"\n className=\"mt-1\"\n value={params.to ? params.to.slice(0, 10) : ''}\n onChange={(e) =>\n setParam(\n 'to',\n e.target.value ? `${e.target.value}T23:59:59.999Z` : undefined\n )\n }\n />\n </div>\n )}\n </div>\n )}\n {spec.allowedParams.includes('limit') && (\n <div>\n <label htmlFor={`${titleId}-limit`} className=\"text-xs font-medium\">\n {PARAM_LABELS.limit}\n </label>\n <Input\n id={`${titleId}-limit`}\n type=\"number\"\n min={1}\n className=\"mt-1\"\n value={params.limit ?? ''}\n aria-invalid={limitInvalid}\n onChange={(e) =>\n setParam('limit', e.target.value === '' ? undefined : Number(e.target.value))\n }\n />\n {limitInvalid && (\n <p className=\"mt-1 text-xs text-destructive\">\n Limit must be a whole number of 1 or more.\n </p>\n )}\n </div>\n )}\n </fieldset>\n )}\n </div>\n\n <ResponsiveDialogFooter>\n <Button variant=\"outline\" onClick={onCancel}>\n Cancel\n </Button>\n <Button onClick={handleSave} disabled={!canSave} data-testid=\"report-save-widget\">\n {widget ? 'Save widget' : 'Add widget'}\n </Button>\n </ResponsiveDialogFooter>\n </>\n );\n}\n\nexport function WidgetEditorDialog({\n open,\n onOpenChange,\n widget,\n onSave,\n}: {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n /** The widget being edited, or null when adding a new one. */\n widget: ReportWidget | null;\n onSave: (widget: ReportWidget) => void;\n}) {\n return (\n <ResponsiveDialog open={open} onOpenChange={onOpenChange}>\n <ResponsiveDialogContent\n className=\"max-h-[85vh] overflow-y-auto sm:max-w-lg\"\n data-testid=\"report-add-widget\"\n >\n {open && (\n <WidgetEditorForm\n widget={widget}\n onCancel={() => onOpenChange(false)}\n onSave={(saved) => {\n onSave(saved);\n onOpenChange(false);\n }}\n />\n )}\n </ResponsiveDialogContent>\n </ResponsiveDialog>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"reportExportPptx.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/reports/reportExportPptx.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,YAAY,EACjB,KAAK,SAAS,EACf,MAAM,eAAe,CAAC;AA2DvB,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,YAAY,EAAE,EACvB,GAAG,EAAE,SAAS,EACd,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CA8Ff"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"reportExportPptx.js","names":[],"sources":["../../../src/planmagnet/reports/reportExportPptx.ts"],"sourcesContent":["import {\n extractRows,\n humanizeKey,\n scalarFields,\n type ReportWidget,\n type ReportRun,\n} from './reportModel';\n\n/**\n * PowerPoint export (ANR-16), client-side, straight from an already-fetched `ReportRun` — one slide per\n * widget: its title, then either a small table of its key figures or its row data, capped to fit one slide.\n * Loaded via a dynamic `import()` only when the user actually exports to PowerPoint, so `pptxgenjs` (a large\n * library) never lands in the main bundle.\n */\n\nconst MAX_TABLE_ROWS = 14;\nconst MAX_TABLE_COLUMNS = 6;\n/**\n * The slide deck's own palette. A .pptx is a standalone document, not themed UI: every slide has a white\n * background whatever theme the exporting user had on, and pptxgenjs only accepts sRGB hex. The app's semantic\n * tokens are oklch values that flip under dark mode (primary becomes near-white), so resolving them at export\n * time would put white text on a white slide. These fixed, print-safe values are therefore the deck's palette —\n * kept in this one place so nothing else in the exporter carries a colour literal.\n */\nconst SLIDE_PALETTE = {\n heading: '4F46E5',\n secondaryText: '666666',\n error: '991B1B',\n tableHeaderFill: 'EEF2FF',\n tableBorder: 'D1D5DB',\n footer: '999999',\n} as const;\n\nfunction cellText(value: unknown): string {\n if (value === null || value === undefined) return '—';\n if (typeof value === 'boolean') return value ? 'Yes' : 'No';\n if (typeof value === 'number') return Number.isInteger(value) ? String(value) : value.toFixed(2);\n return String(value);\n}\n\n/** Table rows for one widget's run result: the object's own scalar fields as a 2-column label/value table when\n * it's a single record, otherwise the first `MAX_TABLE_ROWS` data rows with up to `MAX_TABLE_COLUMNS`\n * columns — the same generic shaping `ReportWidgetRenderer.tsx` uses for the in-app table/KPI view. */\nfunction widgetTable(result: unknown): { header: string[]; rows: string[][] } {\n if (result && typeof result === 'object' && !Array.isArray(result)) {\n const fields = scalarFields(result as Record<string, unknown>);\n if (fields.length > 0) {\n return {\n header: ['Field', 'Value'],\n rows: fields.map(([key, value]) => [humanizeKey(key), cellText(value)]),\n };\n }\n }\n const rows = extractRows(result);\n if (rows.length === 0) return { header: [], rows: [] };\n const columns = [...new Set(rows.flatMap((row) => scalarFields(row).map(([key]) => key)))].slice(\n 0,\n MAX_TABLE_COLUMNS\n );\n return {\n header: columns.map(humanizeKey),\n rows: rows.slice(0, MAX_TABLE_ROWS).map((row) => columns.map((c) => cellText(row[c]))),\n };\n}\n\nexport async function exportReportRunToPptx(\n widgets: ReportWidget[],\n run: ReportRun,\n fileNameBase: string,\n reportName: string\n): Promise<void> {\n const { default: PptxGenJS } = await import('pptxgenjs');\n const pres = new PptxGenJS();\n pres.layout = 'LAYOUT_WIDE';\n pres.author = 'PlanMagnet';\n pres.title = reportName;\n\n const cover = pres.addSlide();\n cover.addText(reportName, {\n x: 0.5,\n y: 1.5,\n w: 9,\n h: 1,\n fontSize: 28,\n bold: true,\n color: SLIDE_PALETTE.heading,\n });\n cover.addText(`Generated ${new Date(run.generatedAt).toLocaleString()}`, {\n x: 0.5,\n y: 2.4,\n w: 9,\n h: 0.5,\n fontSize: 14,\n color: SLIDE_PALETTE.secondaryText,\n });\n\n for (const widget of widgets) {\n const slide = pres.addSlide();\n slide.addText(widget.title, {\n x: 0.4,\n y: 0.3,\n w: 9.2,\n h: 0.6,\n fontSize: 20,\n bold: true,\n color: SLIDE_PALETTE.heading,\n });\n\n if (widget.type === 'TEXT') continue;\n\n const runResult = run.widgets.find((w) => w.widgetId === widget.id);\n if (!runResult || runResult.status !== 'OK') {\n slide.addText(runResult?.message ?? 'Not available in this run.', {\n x: 0.4,\n y: 1.2,\n w: 9.2,\n h: 1,\n fontSize: 14,\n color: SLIDE_PALETTE.error,\n });\n continue;\n }\n\n const { header, rows } = widgetTable(runResult.result);\n if (header.length === 0) {\n slide.addText('No data.', {\n x: 0.4,\n y: 1.2,\n w: 9.2,\n h: 1,\n fontSize: 14,\n color: SLIDE_PALETTE.secondaryText,\n });\n continue;\n }\n slide.addTable(\n [\n header.map((text) => ({\n text,\n options: { bold: true, fill: { color: SLIDE_PALETTE.tableHeaderFill } },\n })),\n ...rows.map((row) => row.map((text) => ({ text }))),\n ],\n {\n x: 0.4,\n y: 1.1,\n w: 9.2,\n fontSize: 10,\n border: { type: 'solid', color: SLIDE_PALETTE.tableBorder, pt: 0.5 },\n }\n );\n if (rows.length === MAX_TABLE_ROWS) {\n slide.addText(`Showing the first ${MAX_TABLE_ROWS} rows.`, {\n x: 0.4,\n y: 6.8,\n w: 9.2,\n h: 0.3,\n fontSize: 9,\n color: SLIDE_PALETTE.footer,\n });\n }\n }\n\n await pres.writeFile({ fileName: `${fileNameBase}.pptx` });\n}\n"],"mappings":";;AAeA,IAAM,IAAiB,IACjB,IAAoB,GAQpB,IAAgB;CACpB,SAAS;CACT,eAAe;CACf,OAAO;CACP,iBAAiB;CACjB,aAAa;CACb,QAAQ;CACT;AAED,SAAS,EAAS,GAAwB;AAIxC,QAHI,KAAU,OAAoC,MAC9C,OAAO,KAAU,YAAkB,IAAQ,QAAQ,OACnD,OAAO,KAAU,WAAiB,OAAO,UAAU,EAAM,GAAG,OAAO,EAAM,GAAG,EAAM,QAAQ,EAAE,GACzF,OAAO,EAAM;;AAMtB,SAAS,EAAY,GAAyD;AAC5E,KAAI,KAAU,OAAO,KAAW,YAAY,CAAC,MAAM,QAAQ,EAAO,EAAE;EAClE,IAAM,IAAS,EAAa,EAAkC;AAC9D,MAAI,EAAO,SAAS,EAClB,QAAO;GACL,QAAQ,CAAC,SAAS,QAAQ;GAC1B,MAAM,EAAO,KAAK,CAAC,GAAK,OAAW,CAAC,EAAY,EAAI,EAAE,EAAS,EAAM,CAAC,CAAC;GACxE;;CAGL,IAAM,IAAO,EAAY,EAAO;AAChC,KAAI,EAAK,WAAW,EAAG,QAAO;EAAE,QAAQ,EAAE;EAAE,MAAM,EAAE;EAAE;CACtD,IAAM,IAAU,CAAC,GAAG,IAAI,IAAI,EAAK,SAAS,MAAQ,EAAa,EAAI,CAAC,KAAK,CAAC,OAAS,EAAI,CAAC,CAAC,CAAC,CAAC,MACzF,GACA,EACD;AACD,QAAO;EACL,QAAQ,EAAQ,IAAI,EAAY;EAChC,MAAM,EAAK,MAAM,GAAG,EAAe,CAAC,KAAK,MAAQ,EAAQ,KAAK,MAAM,EAAS,EAAI,GAAG,CAAC,CAAC;EACvF;;AAGH,eAAsB,EACpB,GACA,GACA,GACA,GACe;CACf,IAAM,EAAE,SAAS,MAAc,MAAM,OAAO,oDACtC,IAAO,IAAI,GAAW;AAG5B,CAFA,EAAK,SAAS,eACd,EAAK,SAAS,cACd,EAAK,QAAQ;CAEb,IAAM,IAAQ,EAAK,UAAU;AAU7B,CATA,EAAM,QAAQ,GAAY;EACxB,GAAG;EACH,GAAG;EACH,GAAG;EACH,GAAG;EACH,UAAU;EACV,MAAM;EACN,OAAO,EAAc;EACtB,CAAC,EACF,EAAM,QAAQ,aAAa,IAAI,KAAK,EAAI,YAAY,CAAC,gBAAgB,IAAI;EACvE,GAAG;EACH,GAAG;EACH,GAAG;EACH,GAAG;EACH,UAAU;EACV,OAAO,EAAc;EACtB,CAAC;AAEF,MAAK,IAAM,KAAU,GAAS;EAC5B,IAAM,IAAQ,EAAK,UAAU;AAW7B,MAVA,EAAM,QAAQ,EAAO,OAAO;GAC1B,GAAG;GACH,GAAG;GACH,GAAG;GACH,GAAG;GACH,UAAU;GACV,MAAM;GACN,OAAO,EAAc;GACtB,CAAC,EAEE,EAAO,SAAS,OAAQ;EAE5B,IAAM,IAAY,EAAI,QAAQ,MAAM,MAAM,EAAE,aAAa,EAAO,GAAG;AACnE,MAAI,CAAC,KAAa,EAAU,WAAW,MAAM;AAC3C,KAAM,QAAQ,GAAW,WAAW,8BAA8B;IAChE,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,UAAU;IACV,OAAO,EAAc;IACtB,CAAC;AACF;;EAGF,IAAM,EAAE,WAAQ,YAAS,EAAY,EAAU,OAAO;AACtD,MAAI,EAAO,WAAW,GAAG;AACvB,KAAM,QAAQ,YAAY;IACxB,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,UAAU;IACV,OAAO,EAAc;IACtB,CAAC;AACF;;AAkBF,EAhBA,EAAM,SACJ,CACE,EAAO,KAAK,OAAU;GACpB;GACA,SAAS;IAAE,MAAM;IAAM,MAAM,EAAE,OAAO,EAAc,iBAAiB;IAAE;GACxE,EAAE,EACH,GAAG,EAAK,KAAK,MAAQ,EAAI,KAAK,OAAU,EAAE,SAAM,EAAE,CAAC,CACpD,EACD;GACE,GAAG;GACH,GAAG;GACH,GAAG;GACH,UAAU;GACV,QAAQ;IAAE,MAAM;IAAS,OAAO,EAAc;IAAa,IAAI;IAAK;GACrE,CACF,EACG,EAAK,WAAW,KAClB,EAAM,QAAQ,qBAAqB,EAAe,SAAS;GACzD,GAAG;GACH,GAAG;GACH,GAAG;GACH,GAAG;GACH,UAAU;GACV,OAAO,EAAc;GACtB,CAAC;;AAIN,OAAM,EAAK,UAAU,EAAE,UAAU,GAAG,EAAa,QAAQ,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"reportExportXlsx.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/reports/reportExportXlsx.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,YAAY,EACjB,KAAK,SAAS,EACf,MAAM,eAAe,CAAC;AAmEvB,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,YAAY,EAAE,EACvB,GAAG,EAAE,SAAS,EACd,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CAQf"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"reportExportXlsx.js","names":[],"sources":["../../../src/planmagnet/reports/reportExportXlsx.ts"],"sourcesContent":["import {\n extractRows,\n humanizeKey,\n scalarFields,\n type ReportWidget,\n type ReportRun,\n} from './reportModel';\n\n/**\n * Excel export (ANR-16), client-side, straight from an already-fetched `ReportRun` — one sheet per widget, the\n * widget's title as the sheet name. Loaded via a dynamic `import()` only when the user actually exports to\n * Excel, so `write-excel-file` never lands in the main bundle. TEXT widgets and ones with no OK data are given\n * a single-cell sheet explaining why, so an export never silently drops a widget the report defines.\n */\n\nconst MAX_SHEET_NAME = 31; // Excel's own limit\n\nfunction sheetName(title: string, index: number): string {\n const cleaned = title.replace(/[\\\\/?*[\\]:]/g, ' ').trim() || `Widget ${index + 1}`;\n return cleaned.slice(0, MAX_SHEET_NAME);\n}\n\nfunction uniqueSheetNames(widgets: ReportWidget[]): string[] {\n const seen = new Map<string, number>();\n return widgets.map((widget, index) => {\n const base = sheetName(widget.title, index);\n const count = seen.get(base) ?? 0;\n seen.set(base, count + 1);\n if (count === 0) return base;\n const suffix = ` (${count + 1})`;\n return `${base.slice(0, MAX_SHEET_NAME - suffix.length)}${suffix}`;\n });\n}\n\ntype XlsxCell = string | number | boolean | null;\ntype XlsxRow = XlsxCell[];\n\n// OWASP CSV/Formula Injection: a cell whose text starts with one of these characters can be read as a\n// live formula (or, via DDE, a command) by some spreadsheet application/version even though this library\n// writes an explicit `String` cell type. Report data is free text entered by any workspace member (work\n// item titles, risk notes, names, …), so every string cell — not just ones sourced from `extractRows` —\n// must be neutralized before it reaches the file. Prefixing with a single quote is the standard mitigation:\n// Excel/Sheets/LibreOffice render it as plain text rather than evaluating the leading character.\nconst FORMULA_TRIGGER = /^[=+\\-@]/;\n\nfunction neutralizeFormula(text: string): string {\n return FORMULA_TRIGGER.test(text) ? `'${text}` : text;\n}\n\nfunction cellValue(value: unknown): XlsxCell {\n if (value === null || value === undefined) return null;\n if (typeof value === 'number' || typeof value === 'boolean') return value;\n return neutralizeFormula(String(value));\n}\n\nfunction widgetSheetData(widget: ReportWidget, run: ReportRun): XlsxRow[] {\n const runResult = run.widgets.find((w) => w.widgetId === widget.id);\n const title = neutralizeFormula(widget.title);\n if (widget.type === 'TEXT') return [[title]];\n if (!runResult || runResult.status !== 'OK') {\n return [[title], [neutralizeFormula(runResult?.message ?? 'Not available in this run.')]];\n }\n const rows = extractRows(runResult.result);\n if (rows.length === 0) return [[title], ['No data.']];\n const columns = [...new Set(rows.flatMap((row) => scalarFields(row).map(([key]) => key)))].slice(\n 0,\n 30\n );\n const header: XlsxRow = columns.map((c) => neutralizeFormula(humanizeKey(c)));\n const body: XlsxRow[] = rows.map((row) => columns.map((c) => cellValue(row[c])));\n return [header, ...body];\n}\n\nexport async function exportReportRunToXlsx(\n widgets: ReportWidget[],\n run: ReportRun,\n fileNameBase: string\n): Promise<void> {\n const { default: writeXlsxFile } = await import('write-excel-file/browser');\n const names = uniqueSheetNames(widgets);\n const sheets = widgets.map((widget, index) => ({\n sheet: names[index],\n data: widgetSheetData(widget, run),\n }));\n await writeXlsxFile(sheets).toFile(`${fileNameBase}.xlsx`);\n}\n"],"mappings":";;AAeA,IAAM,IAAiB;AAEvB,SAAS,EAAU,GAAe,GAAuB;AAEvD,SADgB,EAAM,QAAQ,gBAAgB,IAAI,CAAC,MAAM,IAAI,UAAU,IAAQ,KAChE,MAAM,GAAG,EAAe;;AAGzC,SAAS,EAAiB,GAAmC;CAC3D,IAAM,oBAAO,IAAI,KAAqB;AACtC,QAAO,EAAQ,KAAK,GAAQ,MAAU;EACpC,IAAM,IAAO,EAAU,EAAO,OAAO,EAAM,EACrC,IAAQ,EAAK,IAAI,EAAK,IAAI;AAEhC,MADA,EAAK,IAAI,GAAM,IAAQ,EAAE,EACrB,MAAU,EAAG,QAAO;EACxB,IAAM,IAAS,KAAK,IAAQ,EAAE;AAC9B,SAAO,GAAG,EAAK,MAAM,GAAG,IAAiB,EAAO,OAAO,GAAG;GAC1D;;AAYJ,IAAM,IAAkB;AAExB,SAAS,EAAkB,GAAsB;AAC/C,QAAO,EAAgB,KAAK,EAAK,GAAG,IAAI,MAAS;;AAGnD,SAAS,EAAU,GAA0B;AAG3C,QAFI,KAAU,OAAoC,OAC9C,OAAO,KAAU,YAAY,OAAO,KAAU,YAAkB,IAC7D,EAAkB,OAAO,EAAM,CAAC;;AAGzC,SAAS,EAAgB,GAAsB,GAA2B;CACxE,IAAM,IAAY,EAAI,QAAQ,MAAM,MAAM,EAAE,aAAa,EAAO,GAAG,EAC7D,IAAQ,EAAkB,EAAO,MAAM;AAC7C,KAAI,EAAO,SAAS,OAAQ,QAAO,CAAC,CAAC,EAAM,CAAC;AAC5C,KAAI,CAAC,KAAa,EAAU,WAAW,KACrC,QAAO,CAAC,CAAC,EAAM,EAAE,CAAC,EAAkB,GAAW,WAAW,6BAA6B,CAAC,CAAC;CAE3F,IAAM,IAAO,EAAY,EAAU,OAAO;AAC1C,KAAI,EAAK,WAAW,EAAG,QAAO,CAAC,CAAC,EAAM,EAAE,CAAC,WAAW,CAAC;CACrD,IAAM,IAAU,CAAC,GAAG,IAAI,IAAI,EAAK,SAAS,MAAQ,EAAa,EAAI,CAAC,KAAK,CAAC,OAAS,EAAI,CAAC,CAAC,CAAC,CAAC,MACzF,GACA,GACD;AAGD,QAAO,CAFiB,EAAQ,KAAK,MAAM,EAAkB,EAAY,EAAE,CAAC,CAAC,EAE7D,GADQ,EAAK,KAAK,MAAQ,EAAQ,KAAK,MAAM,EAAU,EAAI,GAAG,CAAC,CAAC,CACxD;;AAG1B,eAAsB,EACpB,GACA,GACA,GACe;CACf,IAAM,EAAE,SAAS,MAAkB,MAAM,OAAO,yDAC1C,IAAQ,EAAiB,EAAQ;AAKvC,OAAM,EAJS,EAAQ,KAAK,GAAQ,OAAW;EAC7C,OAAO,EAAM;EACb,MAAM,EAAgB,GAAQ,EAAI;EACnC,EAAE,CACwB,CAAC,OAAO,GAAG,EAAa,OAAO"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"reportGraphql.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/reports/reportGraphql.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,eAAO,MAAM,yBAAyB,qHAUrC,CAAC;AAEF,eAAO,MAAM,YAAY,gCAyBxB,CAAC;AAEF,eAAO,MAAM,UAAU,gCAoCtB,CAAC;AAEF,eAAO,MAAM,qBAAqB,gCA8BjC,CAAC;AAEF,eAAO,MAAM,aAAa,gCAoCzB,CAAC;AAEF,eAAO,MAAM,aAAa,gCAoCzB,CAAC;AAEF,eAAO,MAAM,aAAa,gCAIzB,CAAC;AAEF,eAAO,MAAM,gBAAgB,gCAc5B,CAAC;AAEF,eAAO,MAAM,UAAU,gCAmBtB,CAAC;AAEF,eAAO,MAAM,cAAc,gCAmB1B,CAAC;AAEF,eAAO,MAAM,gBAAgB,gCAiB5B,CAAC;AAEF,eAAO,MAAM,iBAAiB,gCAQ7B,CAAC;AAEF,eAAO,MAAM,kBAAkB,gCAiB9B,CAAC;AAEF,eAAO,MAAM,mBAAmB,gCAkB/B,CAAC;AAEF,eAAO,MAAM,mBAAmB,gCAI/B,CAAC;AAEF,eAAO,MAAM,qBAAqB,gCAqBjC,CAAC;AAEF,eAAO,MAAM,sBAAsB,gCAwBlC,CAAC;AAEF,eAAO,MAAM,sBAAsB,gCAqBlC,CAAC;AAEF,eAAO,MAAM,sBAAsB,gCAIlC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"reportGraphql.js","names":[],"sources":["../../../src/planmagnet/reports/reportGraphql.ts"],"sourcesContent":["import { gql } from '@apollo/client';\n\n/**\n * Reports GraphQL documents (ANR-13/14/15/16). Field selections match `graphql/wspace.graphql`'s\n * `Planmagnet*Report*` types exactly — validated by `bun run validate:schema` against\n * `graphql/planmagnet.graphql` + `graphql/planmagnet-gateway-roots.graphql` (see schema-drift.config.json).\n * Selection sets are written out in full in each document rather than shared via `${fragment}` interpolation —\n * `gql` here only ever parses one literal per call (no other file in this package interpolates a sub-document\n * into a `gql` tag), so this follows the same convention.\n */\n\nexport const REPORT_SUMMARY_FIELDS_DOC = `\n id\n name\n description\n ownerId\n visibility\n templateKey\n workspaceId\n createdAt\n updatedAt\n`;\n\nexport const LIST_REPORTS = gql`\n query ListPlanmagnetReports(\n $workspaceId: ID!\n $filter: PlanmagnetReportFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetReports(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items {\n id\n name\n description\n ownerId\n visibility\n templateKey\n workspaceId\n createdAt\n updatedAt\n }\n totalCount\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n`;\n\nexport const GET_REPORT = gql`\n query GetPlanmagnetReport($id: ID!) {\n planmagnetReport(id: $id) {\n id\n name\n description\n ownerId\n visibility\n templateKey\n workspaceId\n createdAt\n updatedAt\n definition {\n widgets {\n id\n type\n title\n source\n params {\n projectId\n sprintId\n teamId\n from\n to\n limit\n }\n layout {\n x\n y\n w\n h\n }\n }\n }\n }\n }\n`;\n\nexport const LIST_REPORT_TEMPLATES = gql`\n query ListPlanmagnetReportTemplates {\n planmagnetReportTemplates {\n key\n name\n description\n definition {\n widgets {\n id\n type\n title\n source\n params {\n projectId\n sprintId\n teamId\n from\n to\n limit\n }\n layout {\n x\n y\n w\n h\n }\n }\n }\n }\n }\n`;\n\nexport const CREATE_REPORT = gql`\n mutation CreatePlanmagnetReport($workspaceId: ID!, $input: PlanmagnetCreateReportInput!) {\n planmagnetCreateReport(workspaceId: $workspaceId, input: $input) {\n id\n name\n description\n ownerId\n visibility\n templateKey\n workspaceId\n createdAt\n updatedAt\n definition {\n widgets {\n id\n type\n title\n source\n params {\n projectId\n sprintId\n teamId\n from\n to\n limit\n }\n layout {\n x\n y\n w\n h\n }\n }\n }\n }\n }\n`;\n\nexport const UPDATE_REPORT = gql`\n mutation UpdatePlanmagnetReport($id: ID!, $input: PlanmagnetUpdateReportInput!) {\n planmagnetUpdateReport(id: $id, input: $input) {\n id\n name\n description\n ownerId\n visibility\n templateKey\n workspaceId\n createdAt\n updatedAt\n definition {\n widgets {\n id\n type\n title\n source\n params {\n projectId\n sprintId\n teamId\n from\n to\n limit\n }\n layout {\n x\n y\n w\n h\n }\n }\n }\n }\n }\n`;\n\nexport const DELETE_REPORT = gql`\n mutation DeletePlanmagnetReport($id: ID!) {\n planmagnetDeleteReport(id: $id)\n }\n`;\n\nexport const DUPLICATE_REPORT = gql`\n mutation DuplicatePlanmagnetReport($id: ID!, $name: String) {\n planmagnetDuplicateReport(id: $id, name: $name) {\n id\n name\n description\n ownerId\n visibility\n templateKey\n workspaceId\n createdAt\n updatedAt\n }\n }\n`;\n\nexport const RUN_REPORT = gql`\n mutation RunPlanmagnetReport($id: ID!) {\n planmagnetRunReport(id: $id) {\n id\n reportId\n workspaceId\n trigger\n generatedAt\n generatedBy\n deliveryStatus\n widgets {\n widgetId\n source\n status\n message\n result\n }\n }\n }\n`;\n\nexport const GET_REPORT_RUN = gql`\n query GetPlanmagnetReportRun($id: ID!) {\n planmagnetReportRun(id: $id) {\n id\n reportId\n workspaceId\n trigger\n generatedAt\n generatedBy\n deliveryStatus\n widgets {\n widgetId\n source\n status\n message\n result\n }\n }\n }\n`;\n\nexport const LIST_REPORT_RUNS = gql`\n query ListPlanmagnetReportRuns($reportId: ID!, $pagination: PlanmagnetPaginationInput) {\n planmagnetReportRuns(reportId: $reportId, pagination: $pagination) {\n items {\n id\n trigger\n generatedAt\n generatedBy\n deliveryStatus\n }\n totalCount\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n`;\n\nexport const EXPORT_REPORT_RUN = gql`\n query ExportPlanmagnetReportRun($runId: ID!, $format: PlanmagnetReportExportFormat!) {\n planmagnetExportReportRun(runId: $runId, format: $format) {\n filename\n contentType\n content\n }\n }\n`;\n\nexport const LIST_REPORT_SHARES = gql`\n query ListPlanmagnetReportShares($reportId: ID!) {\n planmagnetReportShares(reportId: $reportId) {\n id\n reportId\n workspaceId\n createdBy\n createdAt\n expiresAt\n revokedAt\n hasPassword\n watermark\n accessCount\n lastAccessedAt\n runId\n }\n }\n`;\n\nexport const CREATE_REPORT_SHARE = gql`\n mutation CreatePlanmagnetReportShare($runId: ID!, $input: PlanmagnetCreateReportShareInput!) {\n planmagnetCreateReportShare(runId: $runId, input: $input) {\n id\n reportId\n workspaceId\n createdBy\n createdAt\n expiresAt\n revokedAt\n hasPassword\n watermark\n accessCount\n lastAccessedAt\n runId\n token\n }\n }\n`;\n\nexport const REVOKE_REPORT_SHARE = gql`\n mutation RevokePlanmagnetReportShare($id: ID!) {\n planmagnetRevokeReportShare(id: $id)\n }\n`;\n\nexport const LIST_REPORT_SCHEDULES = gql`\n query ListPlanmagnetReportSchedules($reportId: ID!) {\n planmagnetReportSchedules(reportId: $reportId) {\n id\n reportId\n workspaceId\n active\n cadence\n hourUtc\n dayOfWeek\n dayOfMonth\n format\n recipientIds\n nextRunAt\n lastRunAt\n lastRunId\n lastError\n createdAt\n updatedAt\n }\n }\n`;\n\nexport const CREATE_REPORT_SCHEDULE = gql`\n mutation CreatePlanmagnetReportSchedule(\n $reportId: ID!\n $input: PlanmagnetCreateReportScheduleInput!\n ) {\n planmagnetCreateReportSchedule(reportId: $reportId, input: $input) {\n id\n reportId\n workspaceId\n active\n cadence\n hourUtc\n dayOfWeek\n dayOfMonth\n format\n recipientIds\n nextRunAt\n lastRunAt\n lastRunId\n lastError\n createdAt\n updatedAt\n }\n }\n`;\n\nexport const UPDATE_REPORT_SCHEDULE = gql`\n mutation UpdatePlanmagnetReportSchedule($id: ID!, $input: PlanmagnetUpdateReportScheduleInput!) {\n planmagnetUpdateReportSchedule(id: $id, input: $input) {\n id\n reportId\n workspaceId\n active\n cadence\n hourUtc\n dayOfWeek\n dayOfMonth\n format\n recipientIds\n nextRunAt\n lastRunAt\n lastRunId\n lastError\n createdAt\n updatedAt\n }\n }\n`;\n\nexport const DELETE_REPORT_SCHEDULE = gql`\n mutation DeletePlanmagnetReportSchedule($id: ID!) {\n planmagnetDeleteReportSchedule(id: $id)\n }\n`;\n"],"mappings":";;AAuBA,IAAa,IAAe,CAAG;;;;;;;;;;;;;;;;;;;;;;;;;GA2BlB,IAAa,CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsChB,IAAwB,CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgC3B,IAAgB,CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCnB,IAAgB,CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCnB,IAAgB,CAAG;;;;GAMnB,IAAmB,CAAG;;;;;;;;;;;;;;GAgBtB,IAAa,CAAG;;;;;;;;;;;;;;;;;;;GAqBhB,IAAiB,CAAG;;;;;;;;;;;;;;;;;;;GAqBpB,IAAmB,CAAG;;;;;;;;;;;;;;;;;GAmBtB,IAAoB,CAAG;;;;;;;;GAUvB,IAAqB,CAAG;;;;;;;;;;;;;;;;;GAmBxB,IAAsB,CAAG;;;;;;;;;;;;;;;;;;GAoBzB,IAAsB,CAAG;;;;GAMzB,IAAwB,CAAG;;;;;;;;;;;;;;;;;;;;;GAuB3B,IAAyB,CAAG;;;;;;;;;;;;;;;;;;;;;;;;GA0B5B,IAAyB,CAAG;;;;;;;;;;;;;;;;;;;;;GAuB5B,IAAyB,CAAG"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"reportModel.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/reports/reportModel.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"reportModel.js","names":[],"sources":["../../../src/planmagnet/reports/reportModel.ts"],"sourcesContent":["/**\n * Reports (ANR-13/14/15/16, BOFF-8048 follow-on): shared types, source metadata and pure helpers for the report\n * builder + viewer. Mirrors the server's own source-of-truth so the UI never drifts from what actually runs:\n *\n * - `REPORT_SOURCE_SPECS` mirrors wspace-planmagnet-svc's `report-sources.ts` (`REPORT_SOURCE_SPECS`) — the\n * per-source allowed param keys. A param a source doesn't use is rejected at save time by the server with a\n * field-scoped BAD_USER_INPUT; this file's `allowedParams` lets the builder never offer that param in the\n * first place, and `validateWidgetDraft` catches it before the round trip.\n * - `packLayout` decides where each widget sits on the 12-column grid from its position in the widgets array\n * (the builder's reorder controls) and its own `w`/`h` — a left-to-right, wrap-on-overflow shelf pack, the\n * same algorithm CSS flex-wrap performs visually (see `ReportGridCanvas.tsx`), so the preview and the\n * persisted `layout` never disagree. There is no free-form drag-to-position: only reorder (where) and\n * resize (how big) are exposed, so every layout this UI can produce is representable and always passes the\n * server's bounds check (`x >= 0`, `y >= 0`, `w >= 1`, `h >= 1`, `x + w <= 12`).\n * - `validateReportDraft` mirrors wspace-planmagnet-svc's `report-definition.ts` (`assertReportDefinition`)\n * closely enough that a draft which passes it also passes the server — widget count (1..24), unique ids,\n * required type/title/source, and params restricted to the ones the widget's source actually reads. Field\n * paths match the server's own (`definition.widgets[i].…`) so a BAD_USER_INPUT that slips past client\n * validation (e.g. a rule this file doesn't yet know) still maps back to the right widget via\n * `widgetIndexFromField`.\n */\n\nexport const GRID_COLUMNS = 12;\nexport const MAX_WIDGETS = 24;\n\nexport const WIDGET_TYPES = ['KPI', 'CHART', 'TABLE', 'TEXT'] as const;\nexport type WidgetType = (typeof WIDGET_TYPES)[number];\n\nexport const REPORT_SOURCES = [\n 'PROJECT_STATUS',\n 'VELOCITY',\n 'BURNDOWN',\n 'CUMULATIVE_FLOW',\n 'CYCLE_TIME',\n 'THROUGHPUT',\n 'QUALITY_METRICS',\n 'DELIVERY_KPIS',\n 'BUDGET_VARIANCE',\n 'TIME_BY_PERSON',\n 'STATUS_FLOW',\n 'WORK_BREAKDOWN',\n 'TEAM_WORKLOAD',\n 'RISKS',\n 'WORK_ITEMS',\n] as const;\nexport type ReportSource = (typeof REPORT_SOURCES)[number];\n\nexport type WidgetParamKey = 'projectId' | 'sprintId' | 'teamId' | 'from' | 'to' | 'limit';\nconst ALL_PARAM_KEYS: readonly WidgetParamKey[] = [\n 'projectId',\n 'sprintId',\n 'teamId',\n 'from',\n 'to',\n 'limit',\n];\n\nexport interface SourceSpec {\n label: string;\n description: string;\n group: string;\n allowedParams: readonly WidgetParamKey[];\n}\n\n/** 1:1 with wspace-planmagnet-svc's REPORT_SOURCE_SPECS — see this file's header. */\nexport const REPORT_SOURCE_SPECS: Record<ReportSource, SourceSpec> = {\n PROJECT_STATUS: {\n label: 'Project status',\n description: \"A project's key, name, status and methodology.\",\n group: 'Projects & work',\n allowedParams: ['projectId'],\n },\n WORK_ITEMS: {\n label: 'Work items',\n description: 'A list of work items, optionally scoped to a project or sprint.',\n group: 'Projects & work',\n allowedParams: ['projectId', 'sprintId', 'limit'],\n },\n WORK_BREAKDOWN: {\n label: 'Work breakdown',\n description: 'Open vs. done items and points, by epic, for one or every project.',\n group: 'Projects & work',\n allowedParams: ['projectId'],\n },\n VELOCITY: {\n label: 'Sprint velocity',\n description:\n \"A project's completed points per sprint, trailing sprints, with a next-sprint forecast.\",\n group: 'Delivery & flow',\n allowedParams: ['projectId', 'limit'],\n },\n BURNDOWN: {\n label: 'Sprint burndown',\n description: 'Daily remaining-work readings for a single sprint.',\n group: 'Delivery & flow',\n allowedParams: ['sprintId'],\n },\n CUMULATIVE_FLOW: {\n label: 'Cumulative flow',\n description: 'Work-item counts by status, by day, over a date range.',\n group: 'Delivery & flow',\n allowedParams: ['projectId', 'from', 'to'],\n },\n THROUGHPUT: {\n label: 'Throughput',\n description: 'Items and points completed per week, over a date range.',\n group: 'Delivery & flow',\n allowedParams: ['projectId', 'from', 'to'],\n },\n CYCLE_TIME: {\n label: 'Cycle time',\n description: 'Average and median hours from in-progress to done, over a date range.',\n group: 'Delivery & flow',\n allowedParams: ['projectId', 'from', 'to'],\n },\n STATUS_FLOW: {\n label: 'Status flow',\n description: 'Status-to-status transition counts over a date range.',\n group: 'Delivery & flow',\n allowedParams: ['projectId', 'from', 'to'],\n },\n DELIVERY_KPIS: {\n label: 'Delivery KPIs',\n description: 'On-time release and milestone rates over a date range.',\n group: 'Delivery & flow',\n allowedParams: ['projectId', 'from', 'to'],\n },\n QUALITY_METRICS: {\n label: 'Quality metrics',\n description: 'Bugs opened/resolved, defect ratio and gate pass rate over a date range.',\n group: 'Quality',\n allowedParams: ['projectId', 'from', 'to'],\n },\n RISKS: {\n label: 'Risks',\n description: \"A project's risk register.\",\n group: 'Quality',\n allowedParams: ['projectId', 'limit'],\n },\n BUDGET_VARIANCE: {\n label: 'Budget variance',\n description: \"A project's budgets, spend vs. total and variance.\",\n group: 'Budget & time',\n allowedParams: ['projectId', 'limit'],\n },\n TIME_BY_PERSON: {\n label: 'Time by person',\n description: 'Logged hours by person, over a date range.',\n group: 'Budget & time',\n allowedParams: ['projectId', 'from', 'to', 'limit'],\n },\n TEAM_WORKLOAD: {\n label: 'Team workload',\n description: \"A team's members and their open item/point counts.\",\n group: 'Budget & time',\n allowedParams: ['teamId', 'limit'],\n },\n};\n\n/** Sources grouped for the \"Add widget\" dialog, in a fixed, reviewed order (not alphabetical / enum order). */\nexport const SOURCE_GROUPS: { group: string; sources: ReportSource[] }[] = (() => {\n const order = ['Projects & work', 'Delivery & flow', 'Quality', 'Budget & time'];\n const groups = new Map<string, ReportSource[]>(order.map((g) => [g, []]));\n for (const source of REPORT_SOURCES) {\n const group = REPORT_SOURCE_SPECS[source].group;\n groups.get(group)?.push(source);\n }\n return order.map((group) => ({ group, sources: groups.get(group) ?? [] }));\n})();\n\nexport function isReportSource(value: string): value is ReportSource {\n return (REPORT_SOURCES as readonly string[]).includes(value);\n}\n\nexport const PARAM_LABELS: Record<WidgetParamKey, string> = {\n projectId: 'Project',\n sprintId: 'Sprint',\n teamId: 'Team',\n from: 'From',\n to: 'To',\n limit: 'Limit',\n};\n\n// ─── Wire types (match graphql/wspace.graphql's Planmagnet* Report types exactly) ────────────────────────────\n\nexport interface WidgetLayout {\n x: number;\n y: number;\n w: number;\n h: number;\n}\n\nexport interface WidgetParams {\n projectId?: string | null;\n sprintId?: string | null;\n teamId?: string | null;\n from?: string | null;\n to?: string | null;\n limit?: number | null;\n}\n\nexport interface ReportWidget {\n id: string;\n type: WidgetType;\n title: string;\n source: ReportSource;\n params: WidgetParams;\n layout: WidgetLayout;\n}\n\nexport interface ReportDefinition {\n widgets: ReportWidget[];\n}\n\nexport type ReportVisibility = 'PRIVATE' | 'WORKSPACE';\n\nexport interface ReportSummary {\n id: string;\n name: string;\n description: string | null;\n ownerId: string;\n visibility: ReportVisibility;\n templateKey: string | null;\n workspaceId: string;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface ReportRecord extends ReportSummary {\n definition: ReportDefinition;\n}\n\nexport interface ReportTemplate {\n key: string;\n name: string;\n description: string;\n definition: ReportDefinition;\n}\n\nexport type WidgetRunStatus = 'OK' | 'FORBIDDEN' | 'ERROR';\n\nexport interface WidgetRunResult {\n widgetId: string;\n source: ReportSource;\n status: WidgetRunStatus;\n message: string | null;\n result: unknown;\n}\n\nexport type ReportRunTrigger = 'MANUAL' | 'SCHEDULE';\nexport type ReportDeliveryStatus = 'PENDING_NOTIFICATIONS';\n\nexport interface ReportRun {\n id: string;\n reportId: string;\n workspaceId: string;\n trigger: ReportRunTrigger;\n generatedAt: string;\n generatedBy: string;\n deliveryStatus: ReportDeliveryStatus | null;\n widgets: WidgetRunResult[];\n}\n\nexport type ReportScheduleCadence = 'DAILY' | 'WEEKLY' | 'MONTHLY';\nexport type ReportExportFormat = 'CSV' | 'JSON' | 'XML';\n\nexport interface ReportSchedule {\n id: string;\n reportId: string;\n workspaceId: string;\n active: boolean;\n cadence: ReportScheduleCadence;\n hourUtc: number;\n dayOfWeek: number | null;\n dayOfMonth: number | null;\n format: ReportExportFormat;\n recipientIds: string[];\n nextRunAt: string;\n lastRunAt: string | null;\n lastRunId: string | null;\n lastError: string | null;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface ReportShare {\n id: string;\n reportId: string;\n workspaceId: string;\n createdBy: string;\n createdAt: string;\n expiresAt: string;\n revokedAt: string | null;\n hasPassword: boolean;\n watermark: string;\n accessCount: number;\n lastAccessedAt: string | null;\n runId: string;\n /** Only set on the response of the create mutation — never stored, never returned again. */\n token?: string | null;\n}\n\nexport interface SharedReport {\n reportName: string;\n generatedAt: string;\n watermark: string;\n widgets: WidgetRunResult[];\n}\n\n// ─── Layout packing ───────────────────────────────────────────────────────────────────────────────────────\n\n/**\n * Left-to-right, wrap-on-overflow shelf pack over the 12-column grid, in array order. The same rule CSS\n * flex-wrap renders visually (`ReportGridCanvas.tsx` uses `width: w/12 * 100%` on flex-wrap children), so the\n * on-screen order always matches the persisted `layout`. Every widget's `w` is clamped to at most\n * `GRID_COLUMNS` first, so a corrupt/legacy value can never produce an unsatisfiable layout.\n */\nexport function packLayout<T extends { id: string; w: number; h: number }>(\n widgets: readonly T[]\n): Map<string, WidgetLayout> {\n const layouts = new Map<string, WidgetLayout>();\n let x = 0;\n let y = 0;\n let rowHeight = 0;\n for (const widget of widgets) {\n const w = Math.min(Math.max(1, Math.round(widget.w)), GRID_COLUMNS);\n const h = Math.max(1, Math.round(widget.h));\n if (x + w > GRID_COLUMNS) {\n x = 0;\n y += rowHeight;\n rowHeight = 0;\n }\n layouts.set(widget.id, { x, y, w, h });\n x += w;\n rowHeight = Math.max(rowHeight, h);\n }\n return layouts;\n}\n\n/** Re-derives every widget's `layout` from its position in `widgets` (order = reading/visual order) and its\n * own `w`/`h`, discarding whatever `x`/`y` it already carried — those are a rendering consequence, not\n * independent state, once only reorder+resize (not free placement) are exposed. */\nexport function repackWidgets(widgets: ReportWidget[]): ReportWidget[] {\n const layouts = packLayout(widgets.map((w) => ({ id: w.id, w: w.layout.w, h: w.layout.h })));\n return widgets.map((w) => ({ ...w, layout: layouts.get(w.id) ?? w.layout }));\n}\n\n// ─── Validation (mirrors report-definition.ts's assertReportDefinition) ──────────────────────────────────────\n\nexport interface FieldError {\n /** e.g. \"definition.widgets[2].params.projectId\" — matches the server's own `extensions.field`. */\n field: string;\n message: string;\n}\n\n/** The widget index a server or client field-scoped error refers to, or null for a report-level field\n * (name/description/visibility) or one this pattern doesn't recognize. */\nexport function widgetIndexFromField(field: string | undefined | null): number | null {\n const match = field?.match(/^definition\\.widgets\\[(\\d+)\\]/);\n return match ? Number(match[1]) : null;\n}\n\nexport function validateReportDraft(widgets: ReportWidget[]): FieldError[] {\n const errors: FieldError[] = [];\n if (widgets.length === 0) {\n errors.push({ field: 'definition.widgets', message: 'Add at least one widget.' });\n return errors;\n }\n if (widgets.length > MAX_WIDGETS) {\n errors.push({\n field: 'definition.widgets',\n message: `At most ${MAX_WIDGETS} widgets are allowed (this report has ${widgets.length}).`,\n });\n }\n const seenIds = new Set<string>();\n widgets.forEach((widget, index) => {\n const field = `definition.widgets[${index}]`;\n if (!widget.id.trim()) {\n errors.push({ field: `${field}.id`, message: 'Widget is missing an id.' });\n } else if (seenIds.has(widget.id)) {\n errors.push({ field: `${field}.id`, message: 'Widget ids must be unique.' });\n } else {\n seenIds.add(widget.id);\n }\n if (!WIDGET_TYPES.includes(widget.type)) {\n errors.push({ field: `${field}.type`, message: 'Choose a widget type.' });\n }\n if (!widget.title.trim()) {\n errors.push({ field: `${field}.title`, message: 'Give this widget a title.' });\n }\n if (!isReportSource(widget.source)) {\n errors.push({ field: `${field}.source`, message: 'Choose a data source.' });\n } else {\n const allowed = new Set<string>(REPORT_SOURCE_SPECS[widget.source].allowedParams);\n for (const key of ALL_PARAM_KEYS) {\n const value = widget.params[key];\n if (value === undefined || value === null || value === '') continue;\n if (!allowed.has(key)) {\n errors.push({\n field: `${field}.params.${key}`,\n message: `${PARAM_LABELS[key]} isn't used by ${REPORT_SOURCE_SPECS[widget.source].label}.`,\n });\n }\n }\n if (widget.params.limit !== undefined && widget.params.limit !== null) {\n if (!Number.isInteger(widget.params.limit) || widget.params.limit < 1) {\n errors.push({\n field: `${field}.params.limit`,\n message: 'Limit must be a whole number of 1 or more.',\n });\n }\n }\n }\n if (\n !Number.isInteger(widget.layout.w) ||\n widget.layout.w < 1 ||\n widget.layout.w > GRID_COLUMNS\n ) {\n errors.push({\n field: `${field}.layout.w`,\n message: `Width must be between 1 and ${GRID_COLUMNS}.`,\n });\n }\n if (!Number.isInteger(widget.layout.h) || widget.layout.h < 1) {\n errors.push({ field: `${field}.layout.h`, message: 'Height must be 1 or more.' });\n }\n });\n return errors;\n}\n\nlet idCounter = 0;\n/** A widget id unique within this browser session — the server only requires uniqueness within one report, but\n * a monotonic counter plus a random suffix means two widgets added in the same millisecond never collide. */\nexport function newWidgetId(): string {\n idCounter += 1;\n return `w${Date.now().toString(36)}${idCounter}${Math.random().toString(36).slice(2, 6)}`;\n}\n\nexport function blankWidget(source: ReportSource = 'WORK_ITEMS'): ReportWidget {\n return {\n id: newWidgetId(),\n type: 'TABLE',\n title: REPORT_SOURCE_SPECS[source].label,\n source,\n params: {},\n layout: { x: 0, y: 0, w: 6, h: 4 },\n };\n}\n\n// ─── Generic result shaping (for the widget renderer) ─────────────────────────────────────────────────────────\n\nexport type Row = Record<string, unknown>;\n\nfunction isPlainObject(value: unknown): value is Row {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction isScalar(value: unknown): value is string | number | boolean {\n return typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean';\n}\n\n/** Only this widget's own primitive fields — never a nested array/object, so a table/KPI never tries to render\n * `children`/`context`/etc. as a cell value. */\nexport function scalarFields(row: Row): [string, string | number | boolean][] {\n return Object.entries(row).filter((entry): entry is [string, string | number | boolean] =>\n isScalar(entry[1])\n );\n}\n\n/**\n * Finds the rows a CHART/TABLE widget should render from an arbitrary result: the result itself when it is\n * already an array of objects, otherwise the first array-valued property of an object result (covers every\n * executor in report-run.service.ts: `sprints`, `points`, `items`, `projects`, or a bare array), otherwise a\n * single-row table of the object's own scalar fields (PROJECT_STATUS, DELIVERY_KPIS, QUALITY_METRICS,\n * CYCLE_TIME's own summary fields).\n */\nexport function extractRows(result: unknown): Row[] {\n if (Array.isArray(result)) return result.filter(isPlainObject);\n if (!isPlainObject(result)) return [];\n for (const value of Object.values(result)) {\n if (Array.isArray(value) && value.every(isPlainObject)) return value as Row[];\n }\n return [result];\n}\n\n/** camelCase/SCREAMING_SNAKE -> \"Camel Case\" / \"Screaming Snake\", for a generic field-name label. */\nexport function humanizeKey(key: string): string {\n const spaced = key\n .replace(/([a-z0-9])([A-Z])/g, '$1 $2')\n .replace(/_/g, ' ')\n .toLowerCase();\n return spaced.charAt(0).toUpperCase() + spaced.slice(1);\n}\n\nconst LABEL_KEY_PRIORITY = [\n 'name',\n 'title',\n 'label',\n 'key',\n 'projectName',\n 'sprintName',\n 'userId',\n 'actorId',\n 'periodStart',\n 'date',\n 'fromStatus',\n 'status',\n 'id',\n];\n\n/** The best field to use as a chart's category axis / a row's display label, preferring identity-ish fields. */\nexport function pickLabelField(rows: Row[]): string | null {\n if (rows.length === 0) return null;\n const keys = new Set(rows.flatMap((row) => scalarFields(row).map(([k]) => k)));\n for (const candidate of LABEL_KEY_PRIORITY) {\n if (keys.has(candidate)) return candidate;\n }\n const firstString = [...keys].find((k) => typeof rows[0]?.[k] === 'string');\n return firstString ?? null;\n}\n\n/** Numeric fields present on (almost) every row, in first-seen order, excluding the label field. */\nexport function pickNumericFields(rows: Row[], excludeKey: string | null): string[] {\n const counts = new Map<string, number>();\n const order: string[] = [];\n for (const row of rows) {\n for (const [key, value] of scalarFields(row)) {\n if (key === excludeKey || typeof value !== 'number') continue;\n if (!counts.has(key)) order.push(key);\n counts.set(key, (counts.get(key) ?? 0) + 1);\n }\n }\n const threshold = Math.max(1, Math.ceil(rows.length / 2));\n return order.filter((key) => (counts.get(key) ?? 0) >= threshold);\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sharedReportRoute.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/reports/sharedReportRoute.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,eAAO,MAAM,uBAAuB,mBAAmB,CAAC;AACxD,qGAAqG;AACrG,eAAO,MAAM,wBAAwB,0BAAsC,CAAC;AAE5E,0EAA0E;AAC1E,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGtD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sharedReportRoute.js","names":[],"sources":["../../../src/planmagnet/reports/sharedReportRoute.ts"],"sourcesContent":["/**\n * The public shared-report route (ANR-17). Unlike every other route constant in this package\n * (`product/routes.ts`, `integrations/routes.ts`), this one is NOT relative to this MFE's `basePath` — the host\n * shell mounts `SharedReportPage` on its own top-level router, OUTSIDE the authenticated app shell/basePath\n * tree entirely (no nav chrome, no auth guard), so the path is absolute and fixed. It lives under `/public/`\n * because fe-libs' shell-route table gives every `/public/*` path the public layout — the product header and\n * footer, but no sidebar or breadcrumb — so an anonymous reader never sees the signed-in navigation and no host\n * needs its own exception.\n */\nexport const SHARED_REPORT_BASE_PATH = '/public/report';\n/** For the host's own `<Route path={SHARED_REPORT_ROUTE_PATH} element={<SharedReportPage />} />`. */\nexport const SHARED_REPORT_ROUTE_PATH = `${SHARED_REPORT_BASE_PATH}/:token`;\n\n/** The full, copyable link for a share token, from the current origin. */\nexport function sharedReportLink(token: string): string {\n const origin = typeof window !== 'undefined' ? window.location.origin : '';\n return `${origin}${SHARED_REPORT_BASE_PATH}/${encodeURIComponent(token)}`;\n}\n"],"mappings":";AASA,IAAa,IAA0B,kBAE1B,IAA2B,GAAG,EAAwB;AAGnE,SAAgB,EAAiB,GAAuB;AAEtD,QAAO,GADQ,OAAO,SAAW,MAAc,OAAO,SAAS,SAAS,KACrD,EAAwB,GAAG,mBAAmB,EAAM"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FeatureInitiativeCard.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/roadmaps/FeatureInitiativeCard.tsx"],"names":[],"mappings":"AA8CA,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CAC9C;AAKD,wBAAgB,qBAAqB,CAAC,EACpC,SAAS,EACT,SAAS,EACT,UAAU,GACX,EAAE;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,gBAAgB,GAAG,IAAI,CAAC;CACrC,2CAuJA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FeatureInitiativeCard.js","names":[],"sources":["../../../src/planmagnet/roadmaps/FeatureInitiativeCard.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { gql } from '@apollo/client';\nimport { useMutation, useQuery } from '@apollo/client/react';\nimport { Button, Card, CardContent, CardHeader, CardTitle } from '@burdenoff/fe-libs/ui';\nimport { Link2, X } from 'lucide-react';\nimport { ErrorLine } from '../controls/ConfirmButton';\nimport { usePlanMagnet, usePlanMagnetNavigate } from '../providers/PlanMagnetProvider';\nimport { detailPath } from '../utils/rowNavigation';\nimport { throwOnError } from '../utils/mutationResult';\n\n/**\n * The roadmap initiative that addresses a feature request (PRM-24). The request's product narrows the roadmaps on\n * offer — the service refuses an initiative on another product's roadmap anyway, and says why. Pick a roadmap, then\n * one of its initiatives; unlinking sets it back to none.\n */\n\nconst ROADMAPS = gql`\n query FeatureInitiativeRoadmaps($workspaceId: ID!, $filter: PlanmagnetRoadmapFilter) {\n planmagnetRoadmaps(workspaceId: $workspaceId, filter: $filter, pagination: { first: 100 }) {\n items {\n id\n name\n }\n }\n }\n`;\nconst INITIATIVES = gql`\n query FeatureInitiativeItems($workspaceId: ID!, $filter: PlanmagnetRoadmapItemFilter) {\n planmagnetRoadmapItems(workspaceId: $workspaceId, filter: $filter, pagination: { first: 100 }) {\n items {\n id\n title\n status\n }\n }\n }\n`;\nconst SET_INITIATIVE = gql`\n mutation FeatureSetInitiative($id: ID!, $input: PlanmagnetUpdateFeatureRequestInput!) {\n planmagnetUpdateFeatureRequest(id: $id, input: $input) {\n id\n roadmapItemId\n }\n }\n`;\n\nexport interface LinkedInitiative {\n id: string;\n title: string;\n roadmap: { id: string; name: string } | null;\n}\n\nconst selectClass =\n 'w-full rounded-md border border-input bg-background px-3 py-2 text-sm disabled:opacity-60';\n\nexport function FeatureInitiativeCard({\n featureId,\n productId,\n initiative,\n}: {\n featureId: string;\n productId: string | null;\n initiative: LinkedInitiative | null;\n}) {\n const { workspaceId } = usePlanMagnet();\n const navigate = usePlanMagnetNavigate();\n const [choosing, setChoosing] = useState(false);\n const [roadmapId, setRoadmapId] = useState('');\n const [itemId, setItemId] = useState('');\n const [error, setError] = useState<string | null>(null);\n\n const roadmaps = useQuery<{ planmagnetRoadmaps: { items: { id: string; name: string }[] } }>(\n ROADMAPS,\n {\n variables: { workspaceId, filter: productId ? { productId } : {} },\n skip: !choosing || !workspaceId,\n }\n );\n const items = useQuery<{\n planmagnetRoadmapItems: { items: { id: string; title: string; status: string }[] };\n }>(INITIATIVES, {\n variables: { workspaceId, filter: { roadmapId } },\n skip: !choosing || !workspaceId || !roadmapId,\n });\n const [save, saveState] = useMutation(SET_INITIATIVE, {\n refetchQueries: ['GetFeatureRequest', 'GetRoadmapDetailPage'],\n awaitRefetchQueries: true,\n });\n\n const set = async (next: string | null) => {\n setError(null);\n try {\n await throwOnError(save({ variables: { id: featureId, input: { roadmapItemId: next } } }));\n setChoosing(false);\n setRoadmapId('');\n setItemId('');\n } catch (e) {\n setError(e instanceof Error ? e.message : 'The initiative could not be linked.');\n }\n };\n\n return (\n <Card data-testid=\"feature-initiative\">\n <CardHeader>\n <CardTitle>Roadmap initiative</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3 text-sm\">\n {initiative ? (\n <div className=\"flex items-start justify-between gap-2\">\n <button\n type=\"button\"\n className=\"min-w-0 text-left hover:underline\"\n onClick={() =>\n initiative.roadmap &&\n navigate(detailPath('/products/roadmap-detail-page', initiative.roadmap.id))\n }\n >\n <p className=\"truncate font-medium\">{initiative.title}</p>\n {initiative.roadmap && (\n <p className=\"text-xs text-muted-foreground\">on {initiative.roadmap.name}</p>\n )}\n </button>\n <Button\n size=\"icon\"\n variant=\"ghost\"\n aria-label=\"Unlink the initiative\"\n disabled={saveState.loading}\n onClick={() => void set(null)}\n data-testid=\"feature-initiative-unlink\"\n >\n <X className=\"h-4 w-4\" />\n </Button>\n </div>\n ) : (\n !choosing && (\n <p className=\"text-muted-foreground\">\n Not linked to a roadmap initiative yet — link the one that addresses this request.\n </p>\n )\n )}\n {error && <ErrorLine message={error} />}\n {choosing ? (\n <div className=\"space-y-2\">\n <select\n aria-label=\"Roadmap\"\n className={selectClass}\n value={roadmapId}\n onChange={(e) => {\n setRoadmapId(e.target.value);\n setItemId('');\n }}\n data-testid=\"feature-initiative-roadmap\"\n >\n <option value=\"\">\n {roadmaps.loading && !roadmaps.data ? 'Loading roadmaps…' : 'Choose a roadmap'}\n </option>\n {(roadmaps.data?.planmagnetRoadmaps.items ?? []).map((r) => (\n <option key={r.id} value={r.id}>\n {r.name}\n </option>\n ))}\n </select>\n {roadmaps.data && roadmaps.data.planmagnetRoadmaps.items.length === 0 && (\n <p className=\"text-xs text-muted-foreground\">\n {productId\n ? \"No roadmap of this request's product yet.\"\n : 'No roadmaps in this workspace yet.'}\n </p>\n )}\n <select\n aria-label=\"Initiative\"\n className={selectClass}\n value={itemId}\n disabled={!roadmapId}\n onChange={(e) => setItemId(e.target.value)}\n data-testid=\"feature-initiative-item\"\n >\n <option value=\"\">\n {items.loading && !items.data ? 'Loading initiatives…' : 'Choose an initiative'}\n </option>\n {(items.data?.planmagnetRoadmapItems.items ?? []).map((i) => (\n <option key={i.id} value={i.id}>\n {i.title}\n </option>\n ))}\n </select>\n <div className=\"flex justify-end gap-2\">\n <Button size=\"sm\" variant=\"ghost\" onClick={() => setChoosing(false)}>\n Cancel\n </Button>\n <Button\n size=\"sm\"\n disabled={!itemId || saveState.loading}\n onClick={() => void set(itemId)}\n data-testid=\"feature-initiative-save\"\n >\n Link\n </Button>\n </div>\n </div>\n ) : (\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={() => setChoosing(true)}\n data-testid=\"feature-initiative-choose\"\n >\n <Link2 className=\"mr-1 h-4 w-4\" />\n {initiative ? 'Change initiative' : 'Link initiative'}\n </Button>\n )}\n </CardContent>\n </Card>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"RoadmapControls.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/roadmaps/RoadmapControls.tsx"],"names":[],"mappings":"AA6BA;;;;GAIG;AAEH,eAAO,MAAM,qBAAqB,qFAOxB,CAAC;AAEX,+GAA+G;AAC/G,eAAO,MAAM,gBAAgB,mCAAoC,CAAC;AAClE,iHAAiH;AACjH,eAAO,MAAM,mBAAmB,oCAAqC,CAAC;AAEtE,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,+EAA+E;IAC/E,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,oFAAoF;IACpF,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,+EAA+E;IAC/E,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,sFAAsF;IACtF,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,wDAAwD;IACxD,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,sDAAsD;IACtD,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,mDAAmD;IACnD,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,oDAAoD;IACpD,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,kFAAkF;IAClF,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC;AAED;mHACmH;AACnH,eAAO,MAAM,eAAe,UAO3B,CAAC;AA4CF;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,SAAS,EACT,IAAI,EACJ,KAAK,GACN,EAAE;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,iBAAiB,CAAC;IACzB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB,2CA0WA;AAED,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,2CA+BnF;AAED,+FAA+F;AAC/F,wBAAgB,oBAAoB,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,2CAuD5F"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"RoadmapControls.js","names":[],"sources":["../../../src/planmagnet/roadmaps/RoadmapControls.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { gql } from '@apollo/client';\nimport { useMutation } from '@apollo/client/react';\nimport {\n Button,\n Input,\n ResponsiveDialog,\n ResponsiveDialogContent,\n ResponsiveDialogDescription,\n ResponsiveDialogFooter,\n ResponsiveDialogHeader,\n ResponsiveDialogTitle,\n ResponsiveDialogTrigger,\n} from '@burdenoff/fe-libs/ui';\nimport { BarChart3, Pencil, Plus, Trash2 } from 'lucide-react';\nimport { usePlanMagnetNavigate } from '../providers/PlanMagnetProvider';\nimport { detailPath } from '../utils/rowNavigation';\nimport { throwOnError, LEAVES_PAGE_CONTEXT } from '../utils/mutationResult';\nimport { mutationErrorMessage } from '../utils/graphqlErrors';\nimport { endBeforeStart, parseIntField } from '../utils/formValidation';\nimport { ConfirmButton, ErrorLine } from '../controls/ConfirmButton';\nimport { enumLabel } from '../controls/WorkItemControls';\nimport {\n PrioritizationScoreFields,\n QuadrantBadge,\n prioritizationScoresValid,\n type PrioritizationFormValues,\n} from '../controls/PrioritizationControls';\n\n/**\n * Roadmap editing (BOFF-7941). Until 2026-09-27 a roadmap was a dead end: no page called\n * planmagnetCreateRoadmapItem / UpdateRoadmapItem / DeleteRoadmapItem, so a new roadmap stayed at 0 items and 0%\n * for good, and the Edit page for the roadmap itself was linked from nowhere.\n */\n\nexport const ROADMAP_ITEM_STATUSES = [\n 'PLANNED',\n 'IN_PROGRESS',\n 'AT_RISK',\n 'DELAYED',\n 'COMPLETED',\n 'CANCELLED',\n] as const;\n\n/** Now/Next/Later horizon (PRM-06). Not placed = no horizon at all (`null`), shown as its own option below. */\nexport const ROADMAP_HORIZONS = ['NOW', 'NEXT', 'LATER'] as const;\n/** Risk level recorded against a roadmap item (PRM-10). \"None\" (no risk assessed) is `null`, not a 4th value. */\nexport const ROADMAP_RISK_LEVELS = ['LOW', 'MEDIUM', 'HIGH'] as const;\n\nexport interface RoadmapItemValues {\n id: string;\n title: string;\n description: string | null;\n status: string;\n swimlane: string | null;\n startDate: string | null;\n endDate: string | null;\n /** Now/Next/Later placement (PRM-06). Null = not placed on any horizon yet. */\n horizon: string | null;\n /** Confidence this item lands as planned, 0-100 (PRM-10). Null = never recorded. */\n confidence: number | null;\n /** Risk level recorded against this item (PRM-10). Null = no risk assessed. */\n riskLevel: string | null;\n /** Free-text risk note, at most 1000 characters (PRM-10). Null = no risk assessed. */\n riskNote: string | null;\n /** MoSCoW classification (PRM-27). Null = never set. */\n moscow?: string | null;\n /** Kano classification (PRM-27). Null = never set. */\n kano?: string | null;\n /** Value score 1-10 (PRM-27). Null = never set. */\n valueScore?: number | null;\n /** Effort score 1-10 (PRM-27). Null = never set. */\n effortScore?: number | null;\n /** Server-computed, never sent back (PRM-27). Null unless both scores are set. */\n valueEffortQuadrant?: string | null;\n}\n\n/** Every query that shows a roadmap's items, counts or progress — including the Now/Next/Later view's own item\n * list (`RoadmapNowNextLater.tsx`), so a placement/confidence/risk change from either view refreshes the other. */\nexport const ROADMAP_QUERIES = [\n 'GetRoadmapDetailPage',\n 'GetRoadmapDetail',\n 'ListRoadmapsPage',\n 'ListRoadmaps',\n 'GetRoadmapAnalytics',\n 'RoadmapNowNextLaterItems',\n];\n\nconst CREATE_ITEM = gql`\n mutation RoadmapControlsCreateItem($input: PlanmagnetCreateRoadmapItemInput!) {\n planmagnetCreateRoadmapItem(input: $input) {\n id\n }\n }\n`;\nconst UPDATE_ITEM = gql`\n mutation RoadmapControlsUpdateItem($id: ID!, $input: PlanmagnetUpdateRoadmapItemInput!) {\n planmagnetUpdateRoadmapItem(id: $id, input: $input) {\n id\n title\n description\n status\n swimlane\n startDate\n endDate\n horizon\n confidence\n riskLevel\n riskNote\n moscow\n kano\n valueScore\n effortScore\n valueEffortQuadrant\n }\n }\n`;\nconst DELETE_ITEM = gql`\n mutation RoadmapControlsDeleteItem($id: ID!) {\n planmagnetDeleteRoadmapItem(id: $id)\n }\n`;\nconst DELETE_ROADMAP = gql`\n mutation RoadmapControlsDelete($id: ID!) {\n planmagnetDeleteRoadmap(id: $id)\n }\n`;\n\nconst day = (iso: string | null | undefined) => (iso ? iso.slice(0, 10) : '');\n\n/**\n * Add an item (no `item`) or edit one. Dates are sent only when they changed: the service checks the pair the item\n * would end up with, so re-sending untouched dates of an older item stored inverted would refuse a plain rename.\n */\nexport function RoadmapItemDialog({\n roadmapId,\n item,\n lanes,\n}: {\n roadmapId: string;\n item?: RoadmapItemValues;\n lanes: string[];\n}) {\n const initial = {\n title: item?.title ?? '',\n description: item?.description ?? '',\n status: item?.status ?? 'PLANNED',\n swimlane: item?.swimlane ?? '',\n startDate: day(item?.startDate),\n endDate: day(item?.endDate),\n horizon: item?.horizon ?? '',\n confidence: item?.confidence != null ? String(item.confidence) : '',\n riskLevel: item?.riskLevel ?? '',\n riskNote: item?.riskNote ?? '',\n };\n // PRM-27: MoSCoW/Kano/Value-Effort scoring, seeded separately from `initial` above so the diff logic below\n // reads exactly like the horizon/confidence/riskLevel/riskNote block it sits next to.\n const initialPrioritization: PrioritizationFormValues = {\n moscow: item?.moscow ?? '',\n kano: item?.kano ?? '',\n valueScore: item?.valueScore != null ? String(item.valueScore) : '',\n effortScore: item?.effortScore != null ? String(item.effortScore) : '',\n };\n const [open, setOpen] = useState(false);\n const [form, setForm] = useState(initial);\n const [prioritization, setPrioritization] =\n useState<PrioritizationFormValues>(initialPrioritization);\n const [error, setError] = useState<string | null>(null);\n const options = { refetchQueries: ROADMAP_QUERIES, awaitRefetchQueries: true };\n const [create, createState] = useMutation(CREATE_ITEM, options);\n const [update, updateState] = useMutation(UPDATE_ITEM, options);\n const saving = createState.loading || updateState.loading;\n const invalidDates = endBeforeStart(form.startDate, form.endDate);\n // Client-side bound matches the server's (0-100 whole number): a BAD_USER_INPUT round trip is avoidable, not\n // the only check — the server still enforces it (extensions.field: \"confidence\" on a refusal that slips past this).\n const confidence = parseIntField(form.confidence, { min: 0, max: 100 });\n const canSave =\n form.title.trim() !== '' &&\n !invalidDates &&\n !confidence.invalid &&\n prioritizationScoresValid(prioritization) &&\n !saving;\n const statuses = (ROADMAP_ITEM_STATUSES as readonly string[]).includes(form.status)\n ? ROADMAP_ITEM_STATUSES\n : [form.status, ...ROADMAP_ITEM_STATUSES];\n const horizons = (ROADMAP_HORIZONS as readonly string[]).includes(form.horizon)\n ? ROADMAP_HORIZONS\n : form.horizon\n ? [form.horizon, ...ROADMAP_HORIZONS]\n : ROADMAP_HORIZONS;\n const riskLevels = (ROADMAP_RISK_LEVELS as readonly string[]).includes(form.riskLevel)\n ? ROADMAP_RISK_LEVELS\n : form.riskLevel\n ? [form.riskLevel, ...ROADMAP_RISK_LEVELS]\n : ROADMAP_RISK_LEVELS;\n const idPrefix = item ? `roadmap-item-${item.id}` : 'roadmap-item-new';\n\n const save = async () => {\n setError(null);\n const common = {\n title: form.title.trim(),\n description: form.description.trim() || null,\n status: form.status,\n swimlane: form.swimlane.trim() || null,\n };\n const value = parseIntField(prioritization.valueScore, { min: 1, max: 10 });\n const effort = parseIntField(prioritization.effortScore, { min: 1, max: 10 });\n try {\n if (item) {\n const dates = {\n ...(form.startDate !== initial.startDate && { startDate: form.startDate || null }),\n ...(form.endDate !== initial.endDate && { endDate: form.endDate || null }),\n };\n // PRM-06/PRM-10 fields: sent only when changed, same reasoning as dates above — resending an unchanged\n // horizon/confidence/riskLevel/riskNote on a plain rename risks an unrelated refusal for no reason.\n const placement = {\n ...(form.horizon !== initial.horizon && { horizon: form.horizon || null }),\n ...(form.confidence !== initial.confidence && { confidence: confidence.value ?? null }),\n ...(form.riskLevel !== initial.riskLevel && { riskLevel: form.riskLevel || null }),\n ...(form.riskNote.trim() !== initial.riskNote.trim() && {\n riskNote: form.riskNote.trim() || null,\n }),\n };\n // PRM-27: same \"only when changed\" rule as placement above.\n const scoring = {\n ...(prioritization.moscow !== initialPrioritization.moscow && {\n moscow: prioritization.moscow || null,\n }),\n ...(prioritization.kano !== initialPrioritization.kano && {\n kano: prioritization.kano || null,\n }),\n ...(prioritization.valueScore !== initialPrioritization.valueScore && {\n valueScore: value.value ?? null,\n }),\n ...(prioritization.effortScore !== initialPrioritization.effortScore && {\n effortScore: effort.value ?? null,\n }),\n };\n await throwOnError(\n update({\n variables: { id: item.id, input: { ...common, ...dates, ...placement, ...scoring } },\n })\n );\n } else {\n await throwOnError(\n create({\n variables: {\n input: {\n roadmapId,\n ...common,\n startDate: form.startDate || undefined,\n endDate: form.endDate || undefined,\n horizon: form.horizon || undefined,\n confidence: confidence.value,\n riskLevel: form.riskLevel || undefined,\n riskNote: form.riskNote.trim() || undefined,\n moscow: prioritization.moscow || undefined,\n kano: prioritization.kano || undefined,\n valueScore: value.value,\n effortScore: effort.value,\n },\n },\n })\n );\n setForm(initial);\n setPrioritization(initialPrioritization);\n }\n setOpen(false);\n } catch (e) {\n setError(mutationErrorMessage(e, 'The item could not be saved.'));\n }\n };\n\n const field = 'mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm';\n return (\n <ResponsiveDialog\n open={open}\n onOpenChange={(next) => {\n setOpen(next);\n if (next) {\n setForm(initial);\n setPrioritization(initialPrioritization);\n } else {\n setError(null);\n }\n }}\n >\n <ResponsiveDialogTrigger asChild>\n {item ? (\n <Button size=\"sm\" variant=\"ghost\" aria-label={`Edit ${item.title}`}>\n <Pencil className=\"h-4 w-4\" />\n </Button>\n ) : (\n <Button size=\"sm\" data-testid=\"roadmap-add-item\">\n <Plus className=\"mr-1 h-4 w-4\" />\n Add item\n </Button>\n )}\n </ResponsiveDialogTrigger>\n <ResponsiveDialogContent className=\"max-w-lg\">\n <ResponsiveDialogHeader>\n <ResponsiveDialogTitle>\n {item ? 'Edit roadmap item' : 'Add roadmap item'}\n </ResponsiveDialogTitle>\n <ResponsiveDialogDescription>\n Items in the same swimlane are grouped together on the roadmap.\n </ResponsiveDialogDescription>\n </ResponsiveDialogHeader>\n <div className=\"space-y-3\">\n <div>\n <label htmlFor={`${idPrefix}-title`} className=\"text-sm font-medium\">\n Title\n </label>\n <Input\n id={`${idPrefix}-title`}\n className=\"mt-1\"\n value={form.title}\n onChange={(e) => setForm({ ...form, title: e.target.value })}\n />\n </div>\n <div className=\"grid grid-cols-2 gap-3\">\n <div>\n <label htmlFor={`${idPrefix}-lane`} className=\"text-sm font-medium\">\n Swimlane\n </label>\n <Input\n id={`${idPrefix}-lane`}\n className=\"mt-1\"\n list={`${idPrefix}-lanes`}\n placeholder=\"e.g. Q4\"\n value={form.swimlane}\n onChange={(e) => setForm({ ...form, swimlane: e.target.value })}\n />\n <datalist id={`${idPrefix}-lanes`}>\n {lanes.map((lane) => (\n <option key={lane} value={lane} />\n ))}\n </datalist>\n </div>\n <div>\n <label htmlFor={`${idPrefix}-status`} className=\"text-sm font-medium\">\n Status\n </label>\n <select\n id={`${idPrefix}-status`}\n className={field}\n value={form.status}\n onChange={(e) => setForm({ ...form, status: e.target.value })}\n >\n {statuses.map((s) => (\n <option key={s} value={s}>\n {enumLabel(s)}\n </option>\n ))}\n </select>\n </div>\n </div>\n <div className=\"grid grid-cols-2 gap-3\">\n <div>\n <label htmlFor={`${idPrefix}-start`} className=\"text-sm font-medium\">\n Start date\n </label>\n <Input\n id={`${idPrefix}-start`}\n type=\"date\"\n className=\"mt-1\"\n value={form.startDate}\n max={form.endDate || undefined}\n onChange={(e) => setForm({ ...form, startDate: e.target.value })}\n />\n </div>\n <div>\n <label htmlFor={`${idPrefix}-end`} className=\"text-sm font-medium\">\n End date\n </label>\n <Input\n id={`${idPrefix}-end`}\n type=\"date\"\n className=\"mt-1\"\n value={form.endDate}\n min={form.startDate || undefined}\n onChange={(e) => setForm({ ...form, endDate: e.target.value })}\n />\n </div>\n </div>\n {invalidDates && <ErrorLine message=\"The end date is before the start date.\" />}\n <div className=\"grid grid-cols-2 gap-3\">\n <div>\n <label htmlFor={`${idPrefix}-horizon`} className=\"text-sm font-medium\">\n Horizon\n </label>\n <select\n id={`${idPrefix}-horizon`}\n data-testid=\"roadmap-item-horizon\"\n className={field}\n value={form.horizon}\n onChange={(e) => setForm({ ...form, horizon: e.target.value })}\n >\n <option value=\"\">Not placed</option>\n {horizons.map((h) => (\n <option key={h} value={h}>\n {enumLabel(h)}\n </option>\n ))}\n </select>\n </div>\n <div>\n <label htmlFor={`${idPrefix}-confidence`} className=\"text-sm font-medium\">\n Confidence (0-100)\n </label>\n <Input\n id={`${idPrefix}-confidence`}\n data-testid=\"roadmap-item-confidence\"\n type=\"number\"\n inputMode=\"numeric\"\n min={0}\n max={100}\n className=\"mt-1\"\n value={form.confidence}\n onChange={(e) => setForm({ ...form, confidence: e.target.value })}\n />\n {confidence.invalid && (\n <ErrorLine message=\"Confidence must be a whole number from 0 to 100.\" />\n )}\n </div>\n </div>\n <div>\n <label htmlFor={`${idPrefix}-risk-level`} className=\"text-sm font-medium\">\n Risk level\n </label>\n <select\n id={`${idPrefix}-risk-level`}\n data-testid=\"roadmap-item-risk-level\"\n className={field}\n value={form.riskLevel}\n onChange={(e) => setForm({ ...form, riskLevel: e.target.value })}\n >\n <option value=\"\">None</option>\n {riskLevels.map((r) => (\n <option key={r} value={r}>\n {enumLabel(r)}\n </option>\n ))}\n </select>\n </div>\n <div>\n <label htmlFor={`${idPrefix}-risk-note`} className=\"text-sm font-medium\">\n Risk note\n </label>\n <textarea\n id={`${idPrefix}-risk-note`}\n data-testid=\"roadmap-item-risk-note\"\n className={`${field} min-h-[56px]`}\n maxLength={1000}\n placeholder=\"Why this item is risky, and what would reduce it\"\n value={form.riskNote}\n onChange={(e) => setForm({ ...form, riskNote: e.target.value })}\n />\n </div>\n <div>\n <label htmlFor={`${idPrefix}-description`} className=\"text-sm font-medium\">\n Description\n </label>\n <textarea\n id={`${idPrefix}-description`}\n className={`${field} min-h-[72px]`}\n value={form.description}\n onChange={(e) => setForm({ ...form, description: e.target.value })}\n />\n </div>\n {/* PRM-27: MoSCoW, Kano and Value-vs-Effort scoring. The quadrant badge shown here is the value last\n read back from the server (this item's own `valueEffortQuadrant`, never computed client-side) —\n on save the roadmap detail page's item row (which stays mounted under this dialog) refreshes with\n the freshly-computed one, since GetRoadmapDetailPage is in ROADMAP_QUERIES and is awaited before\n this dialog closes. */}\n <div className=\"border-t pt-3\">\n <p className=\"text-sm font-medium\">Prioritization</p>\n {item && (\n <div className=\"mt-1 flex items-center gap-2\">\n <span className=\"text-xs text-muted-foreground\">Current quadrant:</span>\n <QuadrantBadge quadrant={item.valueEffortQuadrant ?? null} />\n </div>\n )}\n <div className=\"mt-2\">\n <PrioritizationScoreFields\n idPrefix={idPrefix}\n values={prioritization}\n onChange={setPrioritization}\n />\n </div>\n </div>\n {error && <ErrorLine message={error} />}\n </div>\n <ResponsiveDialogFooter>\n <Button variant=\"outline\" onClick={() => setOpen(false)}>\n Cancel\n </Button>\n <Button onClick={() => void save()} disabled={!canSave}>\n {saving ? 'Saving…' : item ? 'Save item' : 'Add item'}\n </Button>\n </ResponsiveDialogFooter>\n </ResponsiveDialogContent>\n </ResponsiveDialog>\n );\n}\n\nexport function RemoveRoadmapItemButton({ id, title }: { id: string; title: string }) {\n const [remove, state] = useMutation(DELETE_ITEM, {\n refetchQueries: ROADMAP_QUERIES,\n awaitRefetchQueries: true,\n });\n const [error, setError] = useState<string | null>(null);\n const onRemove = async () => {\n setError(null);\n try {\n await throwOnError(remove({ variables: { id } }));\n } catch (e) {\n setError(e instanceof Error ? e.message : 'The item could not be removed.');\n }\n };\n return (\n <div className=\"flex flex-col items-end\">\n <ConfirmButton\n label=\"\"\n ariaLabel={`Remove ${title}`}\n variant=\"outline\"\n icon={<Trash2 className=\"h-4 w-4\" />}\n title={`Remove \"${title}\" from the roadmap?`}\n description=\"The item is removed from this roadmap. This cannot be undone here.\"\n confirmLabel=\"Remove item\"\n destructive\n disabled={state.loading}\n onConfirm={() => void onRemove()}\n />\n {error && <ErrorLine message={error} />}\n </div>\n );\n}\n\n/** Edit (the roadmap's own fields live on the Edit page) and Delete for the roadmap header. */\nexport function RoadmapHeaderActions({ roadmapId, name }: { roadmapId: string; name: string }) {\n const navigate = usePlanMagnetNavigate();\n const [remove, state] = useMutation(DELETE_ROADMAP, {\n refetchQueries: ['ListRoadmapsPage', 'ListRoadmaps'],\n context: LEAVES_PAGE_CONTEXT,\n });\n const [error, setError] = useState<string | null>(null);\n const onDelete = async () => {\n setError(null);\n try {\n await throwOnError(remove({ variables: { id: roadmapId } }));\n navigate('/products/roadmaps-page');\n } catch (e) {\n setError(e instanceof Error ? e.message : 'The roadmap could not be deleted.');\n }\n };\n return (\n <div className=\"flex flex-col items-end gap-2\">\n <div className=\"flex gap-2\">\n <Button\n size=\"sm\"\n variant=\"outline\"\n data-testid=\"roadmap-edit\"\n // BOFF-8045: edit-product-page now edits a real Product, not a Roadmap —\n // this button owns the roadmap's own fields, so it has its own page.\n onClick={() => navigate(detailPath('/products/edit-roadmap-page', roadmapId))}\n >\n <Pencil className=\"mr-1 h-4 w-4\" />\n Edit\n </Button>\n {/* BOFF-7983: the analytics page existed with no way in. */}\n <Button\n size=\"sm\"\n variant=\"outline\"\n data-testid=\"roadmap-analytics\"\n onClick={() => navigate(detailPath('/products/roadmap-analytics-page', roadmapId))}\n >\n <BarChart3 className=\"mr-1 h-4 w-4\" />\n Analytics\n </Button>\n <ConfirmButton\n label=\"Delete\"\n variant=\"outline\"\n icon={<Trash2 className=\"mr-1 h-4 w-4\" />}\n title={`Delete ${name}?`}\n description=\"The roadmap and its items are deleted. This cannot be undone here.\"\n confirmLabel=\"Delete roadmap\"\n destructive\n disabled={state.loading}\n onConfirm={() => void onDelete()}\n />\n </div>\n {error && <ErrorLine message={error} />}\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"RoadmapNowNextLater.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/roadmaps/RoadmapNowNextLater.tsx"],"names":[],"mappings":"AA4FA,UAAU,OAAO;IACf,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;IACzC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,IAAI,CAAC;IAC5C,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,oBAAoB,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CAClE;AA4ID;;qHAEqH;AACrH,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,IAAI,GACL,EAAE;IACD,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAC5B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB,kDA4BA;AAED,4FAA4F;AAC5F,wBAAgB,eAAe,CAAC,EAAE,UAAU,EAAE,EAAE;IAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,kDAW5E;AA0JD,wBAAgB,mBAAmB,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,2CAmYvE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"RoadmapNowNextLater.js","names":[],"sources":["../../../src/planmagnet/roadmaps/RoadmapNowNextLater.tsx"],"sourcesContent":["import { useEffect, useMemo, useState, type DragEvent } from 'react';\nimport { gql } from '@apollo/client';\nimport { useMutation, useQuery } from '@apollo/client/react';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@burdenoff/fe-libs/ui';\nimport {\n AlertTriangle,\n Calendar,\n Gauge,\n Inbox,\n Loader2,\n ShieldAlert,\n ShieldCheck,\n} from 'lucide-react';\nimport { usePlanMagnet } from '../providers/PlanMagnetProvider';\nimport { throwOnError } from '../utils/mutationResult';\nimport { isForbidden, mutationErrorMessage } from '../utils/graphqlErrors';\nimport { enumLabel } from '../controls/WorkItemControls';\nimport { RoadmapItemCommentsButton } from '../comments/RoadmapComments';\nimport { useLiveRefresh } from '../hooks/useLiveRefresh';\nimport { LiveStatus } from '../controls/LiveStatus';\n\n// PRM-11: this board's own query — re-read on any roadmap- or item-level event. Listed alongside\n// `ProductsRoadmapDetailPagePage`'s `GetRoadmapDetailPage` and `ProductsRoadmapAnalyticsPagePage`'s\n// `GetRoadmapAnalytics` in each of THEIR OWN `useLiveRefresh` calls — this board is its own self-contained\n// subscriber (own query, own stream), not fed through the detail page's.\nconst NNL_LIVE_QUERIES = ['RoadmapNowNextLaterItems'];\n\n/**\n * Now/Next/Later (PRM-06, PRM-09, PRM-10): a VIEW of a roadmap's items grouped by `horizon`, alongside the\n * existing Timeline view (`ProductsRoadmapDetailPagePage.tsx`) — not a separate roadmap type. Placement is\n * changed by dragging a card, or by the keyboard \"Move…\" select every card also carries (the same mutation\n * either way: `planmagnetMoveRoadmapItem`), never optimistically: the list shown is always what\n * `planmagnetRoadmapItems` last returned, so a refused move has nothing local to \"undo\" — the card simply never\n * left its column.\n *\n * `planmagnetMoveRoadmapItem`'s `index` is scoped to the (roadmap, horizon, **swimlane**) group, not to the\n * column as a whole — the same lane-scoping the Timeline view treats as first-class (`swimlaneGroups` there).\n * Each column therefore renders its cards **grouped by lane** (one sub-list per lane, in the same order in\n * every column), exactly like the Timeline view's per-lane cards. A drag/drop within a lane's sub-list, or a\n * \"Move…\" menu action, only ever computes an index against that same sub-list — so \"the end of this section\"\n * (what the user sees) and \"the end of this lane's server-side group\" (what the index means) are always the\n * same place, with no cross-lane ambiguity. Dropping a card onto a *different* lane's section is rejected (the\n * move never changes `swimlane`); the lane header is only shown once a roadmap actually uses more than one\n * lane, so a single-lane (the common case) or lane-less roadmap renders exactly one unlabelled section per\n * column — visually identical to a flat list.\n */\n\nconst ITEM_FIELDS = `\n id\n title\n status\n startDate\n endDate\n horizon\n swimlane\n sortOrder\n confidence\n riskLevel\n riskNote\n featureRequestDemand {\n requests\n votes\n }\n`;\n\nconst NNL_ITEMS = gql`\n query RoadmapNowNextLaterItems(\n $workspaceId: ID!\n $filter: PlanmagnetRoadmapItemFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetRoadmapItems(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items {\n ${ITEM_FIELDS}\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n totalCount\n }\n }\n`;\n\nconst MOVE_ITEM = gql`\n mutation RoadmapNowNextLaterMove($id: ID!, $input: PlanmagnetMoveRoadmapItemInput!) {\n planmagnetMoveRoadmapItem(id: $id, input: $input) {\n ${ITEM_FIELDS}\n }\n }\n`;\n\ninterface NnlItem {\n id: string;\n title: string;\n status: string;\n startDate: string | null;\n endDate: string | null;\n horizon: 'NOW' | 'NEXT' | 'LATER' | null;\n swimlane: string | null;\n sortOrder: number;\n confidence: number | null;\n riskLevel: 'LOW' | 'MEDIUM' | 'HIGH' | null;\n riskNote: string | null;\n featureRequestDemand: { requests: number; votes: number } | null;\n}\n\ntype ColumnKey = 'UNPLACED' | 'NOW' | 'NEXT' | 'LATER';\ntype Horizon = 'NOW' | 'NEXT' | 'LATER' | null;\n\nconst COLUMNS: { key: ColumnKey; label: string; horizon: Horizon }[] = [\n { key: 'UNPLACED', label: 'Not placed', horizon: null },\n { key: 'NOW', label: 'Now', horizon: 'NOW' },\n { key: 'NEXT', label: 'Next', horizon: 'NEXT' },\n { key: 'LATER', label: 'Later', horizon: 'LATER' },\n];\nconst columnOf = (horizon: Horizon): ColumnKey => horizon ?? 'UNPLACED';\n\nconst PAGE_SIZE = 200;\n/** Items beyond this many are not loaded. Stated rather than silently dropped: a banner below the board says so\n * when the cap is actually hit, the same \"never silently stop\" convention as `controls/Pickers.tsx`. */\nconst MAX_ITEMS = 2000;\n\n/** Every item on the roadmap, paged through in full (never just the first page) up to `MAX_ITEMS`, ordered by\n * sortOrder then id — same pattern as `ProjectSelect` in `controls/Pickers.tsx`, generalized to a full board\n * rather than a picker list. */\nfunction useAllRoadmapItems(workspaceId: string | undefined, roadmapId: string) {\n const { data, loading, error, fetchMore } = useQuery<{\n planmagnetRoadmapItems: {\n items: NnlItem[];\n pageInfo: { hasNextPage: boolean; endCursor: string | null };\n totalCount: number;\n };\n }>(NNL_ITEMS, {\n variables: {\n workspaceId: workspaceId ?? '',\n filter: { roadmapId },\n pagination: { first: PAGE_SIZE },\n },\n skip: !workspaceId || !roadmapId,\n });\n const loaded = data?.planmagnetRoadmapItems.items ?? [];\n const hasNextPage = data?.planmagnetRoadmapItems.pageInfo.hasNextPage ?? false;\n const endCursor = data?.planmagnetRoadmapItems.pageInfo.endCursor ?? null;\n const totalCount = data?.planmagnetRoadmapItems.totalCount ?? 0;\n\n useEffect(() => {\n if (!hasNextPage || !endCursor || loaded.length >= MAX_ITEMS) return;\n fetchMore({\n variables: { pagination: { first: PAGE_SIZE, after: endCursor } },\n updateQuery: (prev, { fetchMoreResult }) => ({\n planmagnetRoadmapItems: {\n ...fetchMoreResult.planmagnetRoadmapItems,\n items: [\n ...prev.planmagnetRoadmapItems.items,\n ...fetchMoreResult.planmagnetRoadmapItems.items,\n ],\n },\n }),\n }).catch(() => {\n // A failed extra page leaves the items already loaded usable; `truncated` below still reports the gap.\n });\n }, [hasNextPage, endCursor, loaded.length, fetchMore]);\n\n // A bare refetch of this same query — MOVE_ITEM's own `refetchQueries` after every drop, and now also\n // `useLiveRefresh`'s event/poll-driven refetch on this same roadmap — re-issues the network request under\n // this hook's ORIGINAL (page-1) variables. That plain response overwrites whatever the `fetchMore` chain\n // above had already built up (there is no Apollo cache field policy merging pages back together for this\n // field), and the effect above re-climbs the pages correctly, but only after a couple of round trips.\n // Rendering `loaded` directly for that window would flash any roadmap with more than `PAGE_SIZE` items down\n // to its first page of cards on every refetch, then back up a moment later. `committed` instead only ever\n // replaces what this hook returns once a pagination pass has FULLY caught up (no more pages, or `MAX_ITEMS`\n // reached) — until then, the last fully-loaded snapshot keeps being returned. The very first load is\n // unaffected: nothing has been committed yet, so it falls through to `loaded` and grows page by page exactly\n // as before (no regression to the progressive initial reveal).\n //\n // Updated directly during render (the React-documented \"adjust state when a prop/value changes\" pattern —\n // same technique `useLiveRefresh.ts` uses for `mode`/`modeKey`), not inside a `useEffect`: each branch's own\n // guard goes false the instant it has acted, so this never cascades into an extra render loop, and there is\n // no one-render-late flash of stale data the way committing from an effect would add.\n const settled = !!data && (!hasNextPage || loaded.length >= MAX_ITEMS);\n const resetKey = `${workspaceId ?? ''}:${roadmapId}`;\n const [committed, setCommitted] = useState<{\n key: string;\n items: NnlItem[];\n totalCount: number;\n truncated: boolean;\n } | null>(null);\n\n if (committed && committed.key !== resetKey) {\n // A different roadmap (or workspace) invalidates whatever was committed for the last one — defends against\n // this hook ever showing a stale roadmap's cards if a future caller reuses the component instance across a\n // `roadmapId` prop change instead of remounting it.\n setCommitted(null);\n } else if (settled && committed?.items !== loaded) {\n setCommitted({\n key: resetKey,\n items: loaded,\n totalCount,\n truncated: hasNextPage && loaded.length >= MAX_ITEMS,\n });\n }\n\n return {\n items: committed && committed.key === resetKey ? committed.items : loaded,\n loading: loading && !data,\n error,\n totalCount: committed && committed.key === resetKey ? committed.totalCount : totalCount,\n truncated: committed && committed.key === resetKey ? committed.truncated : false,\n };\n}\n\n/** An item's lane key for grouping — `null`/unset normalizes to `''` so it compares equal to itself. */\nconst laneKey = (item: NnlItem) => item.swimlane ?? '';\n/** Display label for a lane key, matching the Timeline view's own term for the unassigned bucket\n * (`ProductsRoadmapDetailPagePage.tsx`'s `swimlaneGroups`). */\nconst laneLabel = (key: string) => key || 'Uncategorized';\n\n/**\n * The 0-based index to send `planmagnetMoveRoadmapItem` so `movedItem` lands where the drop indicates.\n * `laneItems` MUST already be scoped to a single lane's section (the same list the card was dropped in/onto —\n * see the module docstring), so there is no cross-lane ambiguity left to resolve here: `beforeId` is the id of\n * the card the drop should land in front of within that section, or `null` for the end of it, which is exactly\n * the end of the (roadmap, horizon, lane) group the server indexes into.\n */\nfunction destinationIndex(\n laneItems: NnlItem[],\n movedItemId: string,\n beforeId: string | null\n): number {\n const others = laneItems.filter((it) => it.id !== movedItemId);\n if (beforeId === null) return others.length;\n const cut = others.findIndex((it) => it.id === beforeId);\n return cut === -1 ? others.length : cut;\n}\n\nconst RISK_META: Record<\n 'LOW' | 'MEDIUM' | 'HIGH',\n { Icon: typeof ShieldCheck; label: string; className: string }\n> = {\n LOW: { Icon: ShieldCheck, label: 'Low risk', className: 'text-muted-foreground' },\n MEDIUM: { Icon: AlertTriangle, label: 'Medium risk', className: 'text-status-warning-text' },\n HIGH: { Icon: ShieldAlert, label: 'High risk', className: 'text-status-error-text' },\n};\n\n/** Icon + text label (never colour alone) for a risk level; the note (if any) shows on hover/focus via a\n * tooltip, which is keyboard-reachable because the trigger is a real, focusable button. Exported for\n * `roadmaps/RoadmapPresentation.tsx` (PRM-11), which reuses this exact chip rather than re-deriving risk styling. */\nexport function RiskIndicator({\n level,\n note,\n}: {\n level: NnlItem['riskLevel'];\n note: string | null;\n}) {\n if (!level) return null;\n const meta = RISK_META[level];\n const badge = (\n <span\n data-testid=\"nnl-risk\"\n className={`inline-flex items-center gap-1 text-xs ${meta.className}`}\n >\n <meta.Icon className=\"h-3.5 w-3.5\" aria-hidden=\"true\" />\n {meta.label}\n </span>\n );\n if (!note) return badge;\n return (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n className=\"rounded focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n {badge}\n </button>\n </TooltipTrigger>\n <TooltipContent className=\"max-w-xs\">{note}</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n}\n\n/** Exported for `roadmaps/RoadmapPresentation.tsx` (PRM-11) — see `RiskIndicator` above. */\nexport function ConfidenceBadge({ confidence }: { confidence: number | null }) {\n if (confidence === null) return null;\n return (\n <span\n data-testid=\"nnl-confidence\"\n className=\"inline-flex items-center gap-1 text-xs text-muted-foreground\"\n >\n <Gauge className=\"h-3.5 w-3.5\" aria-hidden=\"true\" />\n {confidence}% confident\n </span>\n );\n}\n\n/** The keyboard/menu equivalent of dragging: every horizon this card isn't already in, plus reorder-in-place.\n * A native `<select>` with a constant `value=\"\"` — the same \"Move…\" pattern `board/ProjectBoard.tsx` uses — so\n * it always shows the placeholder after an action instead of needing to be reset by hand. */\nfunction CardMoveMenu({\n item,\n columnKey,\n laneItems,\n disabled,\n onMoveTo,\n onShift,\n}: {\n item: NnlItem;\n columnKey: ColumnKey;\n laneItems: NnlItem[];\n disabled: boolean;\n onMoveTo: (target: ColumnKey) => void;\n onShift: (delta: -1 | 1) => void;\n}) {\n const pos = laneItems.findIndex((it) => it.id === item.id);\n const canUp = pos > 0;\n const canDown = pos !== -1 && pos < laneItems.length - 1;\n return (\n <select\n id={`nnl-move-${item.id}`}\n aria-label={`Move ${item.title}`}\n data-testid=\"nnl-card-move\"\n className=\"rounded border border-input bg-background px-1 py-0.5 text-[11px] disabled:opacity-60\"\n value=\"\"\n disabled={disabled}\n onChange={(e) => {\n const v = e.target.value;\n if (v === 'up') onShift(-1);\n else if (v === 'down') onShift(1);\n // Every other <option> value below is a literal ColumnKey from COLUMNS itself, so this is safe.\n else if (v) onMoveTo(v as ColumnKey);\n }}\n >\n <option value=\"\">Move…</option>\n {COLUMNS.filter((c) => c.key !== columnKey).map((c) => (\n <option key={c.key} value={c.key}>\n Move to {c.label}\n </option>\n ))}\n <option value=\"up\" disabled={!canUp}>\n Move up\n </option>\n <option value=\"down\" disabled={!canDown}>\n Move down\n </option>\n </select>\n );\n}\n\nfunction NnlCard({\n roadmapId,\n item,\n columnKey,\n laneItems,\n draggable,\n dragging,\n dropIndicator,\n moveDisabled,\n onDragStart,\n onDragEnd,\n onDragOverCard,\n onDropOnCard,\n onMoveTo,\n onShift,\n}: {\n roadmapId: string;\n item: NnlItem;\n columnKey: ColumnKey;\n laneItems: NnlItem[];\n draggable: boolean;\n dragging: boolean;\n dropIndicator: 'before' | 'after' | null;\n moveDisabled: boolean;\n onDragStart: (id: string) => void;\n onDragEnd: () => void;\n onDragOverCard: (e: DragEvent<HTMLLIElement>) => void;\n onDropOnCard: (e: DragEvent<HTMLLIElement>) => void;\n onMoveTo: (target: ColumnKey) => void;\n onShift: (delta: -1 | 1) => void;\n}) {\n const demand = item.featureRequestDemand;\n return (\n <li\n draggable={draggable}\n onDragStart={(e) => {\n e.dataTransfer.setData('text/plain', item.id);\n e.dataTransfer.effectAllowed = 'move';\n onDragStart(item.id);\n }}\n onDragEnd={onDragEnd}\n onDragOver={onDragOverCard}\n onDrop={onDropOnCard}\n data-testid=\"nnl-card\"\n className={[\n 'space-y-1.5 rounded-md border bg-background p-2 text-sm',\n draggable ? 'cursor-grab' : '',\n dragging ? 'opacity-50' : '',\n dropIndicator === 'before' ? 'border-t-2 border-t-primary' : '',\n dropIndicator === 'after' ? 'border-b-2 border-b-primary' : '',\n ]\n .filter(Boolean)\n .join(' ')}\n >\n <p className=\"font-medium leading-tight\">{item.title}</p>\n <div className=\"flex flex-wrap items-center gap-x-2 gap-y-1 text-xs text-muted-foreground\">\n <span>{enumLabel(item.status)}</span>\n {(item.startDate || item.endDate) && (\n <span className=\"flex items-center gap-1\">\n <Calendar className=\"h-3 w-3\" aria-hidden=\"true\" />\n {item.startDate ? new Date(item.startDate).toLocaleDateString() : '?'}\n {' - '}\n {item.endDate ? new Date(item.endDate).toLocaleDateString() : '?'}\n </span>\n )}\n </div>\n {demand && demand.requests > 0 && (\n <p className=\"text-xs text-muted-foreground\" data-testid=\"roadmap-item-demand\">\n {demand.requests} feature request{demand.requests === 1 ? '' : 's'} · {demand.votes} vote\n {demand.votes === 1 ? '' : 's'}\n </p>\n )}\n <div className=\"flex flex-wrap items-center gap-x-3 gap-y-1\">\n <ConfidenceBadge confidence={item.confidence} />\n <RiskIndicator level={item.riskLevel} note={item.riskNote} />\n </div>\n <div className=\"flex items-center justify-between gap-1 pt-0.5\">\n <RoadmapItemCommentsButton roadmapId={roadmapId} itemId={item.id} itemTitle={item.title} />\n <CardMoveMenu\n item={item}\n columnKey={columnKey}\n laneItems={laneItems}\n disabled={moveDisabled}\n onMoveTo={onMoveTo}\n onShift={onShift}\n />\n </div>\n </li>\n );\n}\n\n/** Drop-target state: `laneKey` pins the drop to one column's one lane section, so hovering a different lane's\n * (rendered) section in the same column never gets confused with this one — see the module docstring. */\ninterface DropTarget {\n columnKey: ColumnKey;\n laneKey: string;\n beforeId: string | null;\n}\n\nexport function RoadmapNowNextLater({ roadmapId }: { roadmapId: string }) {\n const { workspaceId } = usePlanMagnet();\n const { items, loading, error, totalCount, truncated } = useAllRoadmapItems(\n workspaceId,\n roadmapId\n );\n const [move, moveState] = useMutation(MOVE_ITEM, {\n refetchQueries: [\n 'GetRoadmapDetailPage',\n 'GetRoadmapDetail',\n 'GetRoadmapAnalytics',\n 'RoadmapNowNextLaterItems',\n ],\n awaitRefetchQueries: true,\n });\n const [actionError, setActionError] = useState<string | null>(null);\n const [forbidden, setForbidden] = useState(false);\n const [announcement, setAnnouncement] = useState('');\n const [draggingId, setDraggingId] = useState<string | null>(null);\n const [dropTarget, setDropTarget] = useState<DropTarget | null>(null);\n const [pendingFocusId, setPendingFocusId] = useState<string | null>(null);\n\n // PRM-11: `paused` while `draggingId` is set — a card is mid-drag (mouse down, not yet dropped). A live\n // refetch landing in that window would replace this list (and the native HTML5 drag source sitting in it) out\n // from under the gesture; `useLiveRefresh` defers it until `draggingId` goes back to null (the drop, in\n // `laneDrop`/`onDragEnd`, always clears it), then runs the deferred refetch right away. The move mutation's\n // OWN `refetchQueries` above already re-reads this same query right after a successful drop — this only\n // covers an event from somewhere ELSE (another collaborator) landing while this user is mid-drag.\n const live = useLiveRefresh({\n kind: 'roadmap',\n roadmapId,\n queries: NNL_LIVE_QUERIES,\n paused: draggingId !== null,\n });\n\n // Lane keys in first-appearance order across the WHOLE roadmap (not per column), so every column groups its\n // cards into the same lane sections in the same order — same convention as the Timeline view's\n // `swimlaneGroups`, generalized so it stays consistent across all four columns.\n const laneOrder = useMemo(() => {\n const seen = new Set<string>();\n const order: string[] = [];\n for (const item of items) {\n const key = laneKey(item);\n if (!seen.has(key)) {\n seen.add(key);\n order.push(key);\n }\n }\n return order;\n }, [items]);\n // Only disambiguate visually when there's something to disambiguate: a roadmap that never uses more than one\n // lane renders exactly one unlabelled section per column, identical to a flat list.\n const hasMultipleLanes = laneOrder.length > 1;\n\n const byColumn = useMemo(() => {\n const groups: Record<ColumnKey, NnlItem[]> = { UNPLACED: [], NOW: [], NEXT: [], LATER: [] };\n for (const item of items) groups[columnOf(item.horizon)].push(item);\n return groups;\n }, [items]);\n\n // Every (column, lane) pair's items, in sortOrder — the unit both rendering and move math operate on.\n const byColumnLane = useMemo(() => {\n const groups: Record<ColumnKey, Record<string, NnlItem[]>> = {\n UNPLACED: {},\n NOW: {},\n NEXT: {},\n LATER: {},\n };\n for (const key of laneOrder) {\n groups.UNPLACED[key] = [];\n groups.NOW[key] = [];\n groups.NEXT[key] = [];\n groups.LATER[key] = [];\n }\n for (const item of items) {\n const col = columnOf(item.horizon);\n const lane = laneKey(item);\n (groups[col][lane] ??= []).push(item);\n }\n return groups;\n }, [items, laneOrder]);\n\n // Focus the moved card's own \"Move…\" control once the board has re-rendered in its new position — a\n // horizon-changing move remounts the control in a different column's DOM subtree, which would otherwise drop\n // focus back to the document body with no notice to a keyboard/screen-reader user.\n useEffect(() => {\n if (!pendingFocusId) return;\n const id = pendingFocusId;\n const raf = requestAnimationFrame(() => {\n document.getElementById(`nnl-move-${id}`)?.focus();\n setPendingFocusId(null);\n });\n return () => cancelAnimationFrame(raf);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [items]);\n\n const busy = moveState.loading;\n const movesAllowed = !forbidden;\n const draggingItem = draggingId ? (items.find((it) => it.id === draggingId) ?? null) : null;\n\n const runMove = async (\n item: NnlItem,\n horizon: Horizon,\n index: number,\n resultLabel: string,\n focusAfter: boolean\n ) => {\n setActionError(null);\n if (focusAfter) setPendingFocusId(item.id);\n try {\n await throwOnError(move({ variables: { id: item.id, input: { horizon, index } } }));\n setAnnouncement(`Moved \"${item.title}\" to ${resultLabel}.`);\n } catch (e) {\n if (isForbidden(e)) {\n setForbidden(true);\n setActionError('Your role cannot reorder this roadmap.');\n setAnnouncement(`Move refused: your role cannot reorder this roadmap.`);\n } else {\n const msg = mutationErrorMessage(e, 'The item could not be moved.');\n setActionError(msg);\n setAnnouncement(`Move failed: ${msg}`);\n }\n }\n };\n\n /** `laneItems` is one (column, lane) section's own list — see the module docstring on why the move never\n * needs to consider any other lane's items. */\n const dropOnLane = (\n columnKey: ColumnKey,\n lane: string,\n laneItems: NnlItem[],\n draggedId: string,\n beforeId: string | null\n ) => {\n if (!movesAllowed || busy) return;\n const movedItem = items.find((it) => it.id === draggedId);\n if (!movedItem) return;\n // Defensive: the section's own onDragOver already refuses to arm a drop target for a foreign lane (and a\n // dragover that never calls preventDefault never gets a drop event at all), but a drop is rejected here too\n // in case that ever changes — the move must never silently reassign `swimlane`.\n if (laneKey(movedItem) !== lane) return;\n const column = COLUMNS.find((c) => c.key === columnKey);\n if (!column) return;\n const index = destinationIndex(laneItems, movedItem.id, beforeId);\n // No-op guard: `destinationIndex` already excludes the moved item from its own count, so \"drop just before\n // itself\" and \"drop just after itself\" both resolve to its current lane-relative index — a single equality\n // check catches both without needing to special-case direction.\n if (columnOf(movedItem.horizon) === columnKey) {\n const currentIndex = laneItems.findIndex((it) => it.id === movedItem.id);\n if (currentIndex === index) return;\n }\n void runMove(movedItem, column.horizon, index, column.label, false);\n };\n\n const laneCardDragOver =\n (columnKey: ColumnKey, lane: string, laneItems: NnlItem[]) =>\n (e: DragEvent<HTMLLIElement>, item: NnlItem, index: number) => {\n if (!movesAllowed || busy || !draggingItem || laneKey(draggingItem) !== lane) return;\n e.preventDefault();\n // Stop this from also bubbling to the lane section's own onDragOver, which would otherwise overwrite the\n // precise before/after target computed here with \"append at the end\" on every mousemove over a card.\n e.stopPropagation();\n e.dataTransfer.dropEffect = 'move';\n const rect = e.currentTarget.getBoundingClientRect();\n const before = e.clientY < rect.top + rect.height / 2;\n const beforeId = before ? item.id : (laneItems[index + 1]?.id ?? null);\n setDropTarget({ columnKey, laneKey: lane, beforeId });\n };\n\n const laneDrop =\n (columnKey: ColumnKey, lane: string, laneItems: NnlItem[]) => (e: DragEvent<HTMLElement>) => {\n e.preventDefault();\n // Stop this from also bubbling to the section's own onDrop, which would otherwise run the same drop a\n // second time with the section-level (already-cleared) target.\n e.stopPropagation();\n const draggedId = e.dataTransfer.getData('text/plain');\n const beforeId =\n dropTarget?.columnKey === columnKey && dropTarget.laneKey === lane\n ? dropTarget.beforeId\n : null;\n setDropTarget(null);\n setDraggingId(null);\n if (draggedId) dropOnLane(columnKey, lane, laneItems, draggedId, beforeId);\n };\n\n if (loading) {\n return (\n <div className=\"flex items-center justify-center p-12\" data-testid=\"nnl-board\">\n <Loader2 className=\"h-8 w-8 animate-spin text-muted-foreground\" aria-hidden=\"true\" />\n </div>\n );\n }\n\n if (error) {\n return (\n <div className=\"p-6 text-destructive\" data-testid=\"nnl-board\">\n Failed to load roadmap items: {error.message}\n </div>\n );\n }\n\n return (\n <div className=\"space-y-3\" data-testid=\"nnl-board\">\n <p className=\"sr-only\" role=\"status\" aria-live=\"polite\">\n {announcement}\n </p>\n <div className=\"flex justify-end\">\n <LiveStatus mode={live.mode} />\n </div>\n {forbidden && (\n <p\n role=\"alert\"\n className=\"rounded-md border border-destructive/40 p-2 text-sm text-destructive\"\n >\n Your role can view this roadmap but not reorder it. Moves are disabled below.\n </p>\n )}\n {!forbidden && actionError && (\n <p\n role=\"alert\"\n className=\"rounded-md border border-destructive/40 p-2 text-sm text-destructive\"\n >\n {actionError}\n </p>\n )}\n {truncated && (\n <p className=\"text-xs text-muted-foreground\">\n Showing the first {MAX_ITEMS} of {totalCount} items.\n </p>\n )}\n <div className=\"grid grid-cols-1 gap-3 md:grid-cols-4\">\n {COLUMNS.map((column) => {\n const columnItems = byColumn[column.key];\n // Every lane's own list for this column, plus whether it should render at all: a roadmap using only\n // one lane always shows its (possibly empty) single section, exactly like the old flat list; once a\n // roadmap uses more than one lane, an EMPTY lane's section only appears while something from that\n // exact lane is being dragged (so it can serve as a drop target), keeping the common, non-dragging\n // view free of empty \"Lane — no items\" clutter.\n const laneSections = laneOrder\n .map((lane) => ({ lane, laneItems: byColumnLane[column.key][lane] ?? [] }))\n .filter(\n ({ lane, laneItems }) =>\n !hasMultipleLanes ||\n laneItems.length > 0 ||\n (draggingItem && laneKey(draggingItem) === lane)\n );\n return (\n <section\n key={column.key}\n aria-label={`${column.label} column`}\n data-testid={`nnl-column-${column.key}`}\n className=\"min-h-[120px] rounded-md border bg-muted/30 p-2\"\n // The whole column accepts a drop, not just its lane lists: a card dropped on the column's empty\n // space (below a short list, or on its header) goes to the END of its own lane in this column — the\n // lane never changes on a drop (see dropOnLane). The lists and cards handle their own, more precise\n // drops and stop them here.\n onDragOver={(e) => {\n if (!movesAllowed || busy || !draggingItem) return;\n e.preventDefault();\n e.dataTransfer.dropEffect = 'move';\n setDropTarget({\n columnKey: column.key,\n laneKey: laneKey(draggingItem),\n beforeId: null,\n });\n }}\n onDrop={(e) => {\n if (!draggingItem) return;\n const lane = laneKey(draggingItem);\n laneDrop(column.key, lane, byColumnLane[column.key][lane] ?? [])(e);\n }}\n >\n <h3 className=\"mb-2 flex items-center gap-1.5 text-sm font-medium\">\n {column.key === 'UNPLACED' && (\n <Inbox className=\"h-3.5 w-3.5 text-muted-foreground\" aria-hidden=\"true\" />\n )}\n {column.label}\n <span className=\"text-xs text-muted-foreground\">({columnItems.length})</span>\n </h3>\n {laneSections.length === 0 && (\n <p className=\"py-4 text-center text-xs text-muted-foreground\">No items</p>\n )}\n <div className=\"space-y-3\">\n {laneSections.map(({ lane, laneItems }) => {\n const isLaneDropTarget =\n dropTarget?.columnKey === column.key && dropTarget.laneKey === lane;\n return (\n <div key={lane || '(none)'} className=\"space-y-1\">\n {hasMultipleLanes && (\n <p\n data-testid=\"nnl-lane-label\"\n className=\"text-[11px] font-medium text-muted-foreground\"\n >\n {laneLabel(lane)}{' '}\n <span className=\"text-muted-foreground/70\">({laneItems.length})</span>\n </p>\n )}\n <ul\n className={`min-h-[48px] space-y-2 rounded-sm p-1 ${\n isLaneDropTarget && !dropTarget.beforeId ? 'ring-2 ring-primary' : ''\n }`}\n onDragOver={(e) => {\n if (\n !movesAllowed ||\n busy ||\n !draggingItem ||\n laneKey(draggingItem) !== lane\n )\n return;\n e.preventDefault();\n e.dataTransfer.dropEffect = 'move';\n setDropTarget({ columnKey: column.key, laneKey: lane, beforeId: null });\n }}\n onDrop={laneDrop(column.key, lane, laneItems)}\n >\n {laneItems.length === 0 && (\n <li\n className=\"py-2 text-center text-[11px] text-muted-foreground\"\n aria-hidden=\"true\"\n >\n Drop here\n </li>\n )}\n {laneItems.map((item, index) => {\n // 'before': the drop would land this card right in front of `item`. 'after': the drop\n // targets \"end of this lane's section\" (beforeId null) and `item` is that section's\n // last card, so the line belongs below it.\n const dropIndicator: 'before' | 'after' | null = !isLaneDropTarget\n ? null\n : dropTarget.beforeId === item.id\n ? 'before'\n : dropTarget.beforeId === null && index === laneItems.length - 1\n ? 'after'\n : null;\n return (\n <NnlCard\n key={item.id}\n roadmapId={roadmapId}\n item={item}\n columnKey={column.key}\n laneItems={laneItems}\n draggable={movesAllowed && !busy}\n dragging={draggingId === item.id}\n dropIndicator={dropIndicator}\n moveDisabled={!movesAllowed || busy}\n onDragStart={setDraggingId}\n onDragEnd={() => {\n setDraggingId(null);\n setDropTarget(null);\n }}\n onDragOverCard={(e) =>\n laneCardDragOver(column.key, lane, laneItems)(e, item, index)\n }\n onDropOnCard={laneDrop(column.key, lane, laneItems)}\n onMoveTo={(target) => {\n const targetColumn = COLUMNS.find((c) => c.key === target);\n if (!targetColumn) return;\n const targetLaneItems = byColumnLane[target][laneKey(item)] ?? [];\n const index2 = destinationIndex(targetLaneItems, item.id, null);\n void runMove(\n item,\n targetColumn.horizon,\n index2,\n targetColumn.label,\n true\n );\n }}\n onShift={(delta) => {\n const pos = laneItems.findIndex((it) => it.id === item.id);\n const target = pos + delta;\n if (pos === -1 || target < 0 || target >= laneItems.length) return;\n void runMove(item, item.horizon, target, column.label, true);\n }}\n />\n );\n })}\n </ul>\n </div>\n );\n })}\n </div>\n </section>\n );\n })}\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"RoadmapPresentation.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/roadmaps/RoadmapPresentation.tsx"],"names":[],"mappings":"AAcA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;IACzC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,IAAI,CAAC;IAC5C,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAuFD,wBAAgB,mBAAmB,CAAC,EAClC,WAAW,EACX,kBAAkB,EAClB,IAAI,EACJ,KAAK,GACN,EAAE;IACD,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,IAAI,EAAE,UAAU,GAAG,KAAK,CAAC;IACzB,KAAK,EAAE,uBAAuB,EAAE,CAAC;CAClC,2CAgHA"}
|