unleash-server 8.0.1 → 8.0.2
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/lib/addons/addon.d.ts +10 -2
- package/dist/lib/addons/addon.d.ts.map +1 -1
- package/dist/lib/addons/addon.js +104 -6
- package/dist/lib/addons/addon.js.map +1 -1
- package/dist/lib/addons/datadog-definition.js +1 -1
- package/dist/lib/addons/datadog-definition.js.map +1 -1
- package/dist/lib/addons/datadog.test.js +2 -0
- package/dist/lib/addons/datadog.test.js.map +1 -1
- package/dist/lib/addons/index.d.ts.map +1 -1
- package/dist/lib/addons/index.js +2 -0
- package/dist/lib/addons/index.js.map +1 -1
- package/dist/lib/addons/new-relic.d.ts.map +1 -1
- package/dist/lib/addons/new-relic.js +0 -1
- package/dist/lib/addons/new-relic.js.map +1 -1
- package/dist/lib/addons/new-relic.test.js +0 -1
- package/dist/lib/addons/new-relic.test.js.map +1 -1
- package/dist/lib/addons/slack.test.js +1 -2
- package/dist/lib/addons/slack.test.js.map +1 -1
- package/dist/lib/addons/teams-definition.d.ts.map +1 -1
- package/dist/lib/addons/teams-definition.js +1 -0
- package/dist/lib/addons/teams-definition.js.map +1 -1
- package/dist/lib/addons/teams-workflow-definition.d.ts +4 -0
- package/dist/lib/addons/teams-workflow-definition.d.ts.map +1 -0
- package/dist/lib/addons/teams-workflow-definition.js +66 -0
- package/dist/lib/addons/teams-workflow-definition.js.map +1 -0
- package/dist/lib/addons/teams-workflow.d.ts +15 -0
- package/dist/lib/addons/teams-workflow.d.ts.map +1 -0
- package/dist/lib/addons/teams-workflow.js +110 -0
- package/dist/lib/addons/teams-workflow.js.map +1 -0
- package/dist/lib/addons/teams-workflow.test.d.ts +2 -0
- package/dist/lib/addons/teams-workflow.test.d.ts.map +1 -0
- package/dist/lib/addons/teams-workflow.test.js +202 -0
- package/dist/lib/addons/teams-workflow.test.js.map +1 -0
- package/dist/lib/addons/teams.d.ts.map +1 -1
- package/dist/lib/addons/teams.js +0 -1
- package/dist/lib/addons/teams.js.map +1 -1
- package/dist/lib/addons/teams.test.js +0 -1
- package/dist/lib/addons/teams.test.js.map +1 -1
- package/dist/lib/addons/validate-url.d.ts +18 -0
- package/dist/lib/addons/validate-url.d.ts.map +1 -0
- package/dist/lib/addons/validate-url.js +93 -0
- package/dist/lib/addons/validate-url.js.map +1 -0
- package/dist/lib/addons/validate-url.test.d.ts +2 -0
- package/dist/lib/addons/validate-url.test.d.ts.map +1 -0
- package/dist/lib/addons/validate-url.test.js +199 -0
- package/dist/lib/addons/validate-url.test.js.map +1 -0
- package/dist/lib/create-config.d.ts.map +1 -1
- package/dist/lib/create-config.js +7 -0
- package/dist/lib/create-config.js.map +1 -1
- package/dist/lib/error/bad-data-error.d.ts.map +1 -1
- package/dist/lib/error/bad-data-error.js +10 -2
- package/dist/lib/error/bad-data-error.js.map +1 -1
- package/dist/lib/error/unleash-error.test.js +23 -0
- package/dist/lib/error/unleash-error.test.js.map +1 -1
- package/dist/lib/features/frontend-api/frontend-api-service.d.ts.map +1 -1
- package/dist/lib/features/frontend-api/frontend-api-service.js +17 -20
- package/dist/lib/features/frontend-api/frontend-api-service.js.map +1 -1
- package/dist/lib/features/metrics/integrations/integration-metrics.d.ts +1 -1
- package/dist/lib/features/metrics/integrations/integration-metrics.d.ts.map +1 -1
- package/dist/lib/features/metrics/integrations/integration-metrics.js +2 -0
- package/dist/lib/features/metrics/integrations/integration-metrics.js.map +1 -1
- package/dist/lib/middleware/secure-headers.d.ts.map +1 -1
- package/dist/lib/middleware/secure-headers.js +20 -1
- package/dist/lib/middleware/secure-headers.js.map +1 -1
- package/dist/lib/openapi/spec/addon-create-update-schema.d.ts +1 -1
- package/dist/lib/openapi/spec/addon-create-update-schema.js +1 -1
- package/dist/lib/openapi/spec/addons-schema.d.ts +15 -0
- package/dist/lib/openapi/spec/addons-schema.d.ts.map +1 -1
- package/dist/lib/openapi/spec/addons-schema.js +51 -0
- package/dist/lib/openapi/spec/addons-schema.js.map +1 -1
- package/dist/lib/openapi/spec/profile-schema.d.ts +6 -1
- package/dist/lib/openapi/spec/profile-schema.d.ts.map +1 -1
- package/dist/lib/openapi/spec/profile-schema.js +13 -1
- package/dist/lib/openapi/spec/profile-schema.js.map +1 -1
- package/dist/lib/openapi/spec/profile-schema.test.js +1 -0
- package/dist/lib/openapi/spec/profile-schema.test.js.map +1 -1
- package/dist/lib/routes/admin-api/addon.d.ts.map +1 -1
- package/dist/lib/routes/admin-api/addon.js +6 -2
- package/dist/lib/routes/admin-api/addon.js.map +1 -1
- package/dist/lib/routes/admin-api/user/user.d.ts.map +1 -1
- package/dist/lib/routes/admin-api/user/user.js +3 -1
- package/dist/lib/routes/admin-api/user/user.js.map +1 -1
- package/dist/lib/routes/admin-api/user/user.test.js +32 -7
- package/dist/lib/routes/admin-api/user/user.test.js.map +1 -1
- package/dist/lib/routes/util.d.ts.map +1 -1
- package/dist/lib/routes/util.js +8 -1
- package/dist/lib/routes/util.js.map +1 -1
- package/dist/lib/routes/util.test.d.ts +2 -0
- package/dist/lib/routes/util.test.d.ts.map +1 -0
- package/dist/lib/routes/util.test.js +18 -0
- package/dist/lib/routes/util.test.js.map +1 -0
- package/dist/lib/schema/html-input.d.ts +4 -0
- package/dist/lib/schema/html-input.d.ts.map +1 -0
- package/dist/lib/schema/html-input.js +38 -0
- package/dist/lib/schema/html-input.js.map +1 -0
- package/dist/lib/schema/html-input.test.d.ts +2 -0
- package/dist/lib/schema/html-input.test.d.ts.map +1 -0
- package/dist/lib/schema/html-input.test.js +98 -0
- package/dist/lib/schema/html-input.test.js.map +1 -0
- package/dist/lib/server-impl.d.ts +2 -1
- package/dist/lib/server-impl.d.ts.map +1 -1
- package/dist/lib/server-impl.js +2 -1
- package/dist/lib/server-impl.js.map +1 -1
- package/dist/lib/services/addon-service.d.ts +8 -1
- package/dist/lib/services/addon-service.d.ts.map +1 -1
- package/dist/lib/services/addon-service.js +24 -1
- package/dist/lib/services/addon-service.js.map +1 -1
- package/dist/lib/services/addon-service.test.js +75 -8
- package/dist/lib/services/addon-service.test.js.map +1 -1
- package/dist/lib/services/project-schema.d.ts +1 -2
- package/dist/lib/services/project-schema.d.ts.map +1 -1
- package/dist/lib/services/project-schema.js +4 -2
- package/dist/lib/services/project-schema.js.map +1 -1
- package/dist/lib/services/user-service.d.ts +1 -0
- package/dist/lib/services/user-service.d.ts.map +1 -1
- package/dist/lib/services/user-service.js +7 -0
- package/dist/lib/services/user-service.js.map +1 -1
- package/dist/lib/types/experimental.d.ts +1 -1
- package/dist/lib/types/experimental.d.ts.map +1 -1
- package/dist/lib/types/experimental.js +21 -0
- package/dist/lib/types/experimental.js.map +1 -1
- package/dist/lib/types/model.d.ts +2 -0
- package/dist/lib/types/model.d.ts.map +1 -1
- package/dist/lib/types/model.js.map +1 -1
- package/dist/lib/types/option.d.ts +4 -0
- package/dist/lib/types/option.d.ts.map +1 -1
- package/dist/lib/ui-config/ui-config-service.d.ts.map +1 -1
- package/dist/lib/ui-config/ui-config-service.js +4 -2
- package/dist/lib/ui-config/ui-config-service.js.map +1 -1
- package/dist/lib/ui-config/ui-config.test.js +21 -2
- package/dist/lib/ui-config/ui-config.test.js.map +1 -1
- package/dist/lib/util/anonymise.d.ts +1 -0
- package/dist/lib/util/anonymise.d.ts.map +1 -1
- package/dist/lib/util/anonymise.js +3 -0
- package/dist/lib/util/anonymise.js.map +1 -1
- package/dist/lib/util/anonymise.test.js +4 -1
- package/dist/lib/util/anonymise.test.js.map +1 -1
- package/dist/migrations/20260617115403-update-flag-descriptions.d.ts +3 -0
- package/dist/migrations/20260617115403-update-flag-descriptions.d.ts.map +1 -0
- package/dist/migrations/20260617115403-update-flag-descriptions.js +38 -0
- package/dist/migrations/20260617115403-update-flag-descriptions.js.map +1 -0
- package/dist/migrations/20260624120000-servicenow-change-references.d.ts +3 -0
- package/dist/migrations/20260624120000-servicenow-change-references.d.ts.map +1 -0
- package/dist/migrations/20260624120000-servicenow-change-references.js +22 -0
- package/dist/migrations/20260624120000-servicenow-change-references.js.map +1 -0
- package/dist/server-dev.js +5 -1
- package/dist/server-dev.js.map +1 -1
- package/dist/test/e2e/api/admin/addon.e2e.test.js +2 -1
- package/dist/test/e2e/api/admin/addon.e2e.test.js.map +1 -1
- package/dist/test/e2e/services/addon-service.e2e.test.js +2 -0
- package/dist/test/e2e/services/addon-service.e2e.test.js.map +1 -1
- package/frontend/build/index.html +2 -2
- package/frontend/build/static/{AdvancedPlayground-BEYkf6Xg.js → AdvancedPlayground-DdeMb-6I.js} +2 -2
- package/frontend/build/static/{BackendConnections-DdvotR_8.js → BackendConnections-kgR0xyIH.js} +1 -1
- package/frontend/build/static/DialogWithAside-DzCSDyWo.js +1110 -0
- package/frontend/build/static/{EnterpriseEdge-DN23kaQp.js → EnterpriseEdge-CjslqYDM.js} +4 -4
- package/frontend/build/static/{FeatureMetricsChart-CmVkRuwG.js → FeatureMetricsChart-B4WryxcW.js} +2 -2
- package/frontend/build/static/FeatureStaleDialog-EzReRTI5.js +8 -0
- package/frontend/build/static/FeatureViewLazyExport-8eQKTvdS.js +10 -0
- package/frontend/build/static/{FlagMetricsChart-ZjHSwulg.js → FlagMetricsChart-hNQuwOxW.js} +2 -2
- package/frontend/build/static/{FrontendNetworkTrafficUsage-BmLOJdK9.js → FrontendNetworkTrafficUsage-pcr83PWo.js} +1 -1
- package/frontend/build/static/GridLayoutWrapper-B_YyjZ7l.js +5 -0
- package/frontend/build/static/{ImpactMetricsPage-D1CETZR_.js → ImpactMetricsPage-DGH_S9oz.js} +1 -1
- package/frontend/build/static/ImpactViewsPage-DZqKPFvE.js +1 -0
- package/frontend/build/static/{LazyAdminExport-BvtR_me3.js → LazyAdminExport-B1ReAViz.js} +15 -15
- package/frontend/build/static/LazyProjectExport-BMVcGpNI.js +46 -0
- package/frontend/build/static/LifecycleChartComponent-BeoRUO9q.js +2 -0
- package/frontend/build/static/{LineChartComponent-d80f3Tky.js → LineChartComponent-BbCMbJ-m.js} +1 -1
- package/frontend/build/static/{MarkCompletedDialogue-CtzRfovJ.js → MarkCompletedDialogue-CcXyp8UE.js} +1 -1
- package/frontend/build/static/{NetworkOverview-D1UOxIaf.js → NetworkOverview-0mBnFAZX.js} +1 -1
- package/frontend/build/static/{NetworkTraffic-CLnhub6c.js → NetworkTraffic-DmG5Iv25.js} +1 -1
- package/frontend/build/static/{NetworkTrafficUsage-PgI0lqze.js → NetworkTrafficUsage-DccaVLYs.js} +1 -1
- package/frontend/build/static/OnboardingProgress-Bp9sZ-ZM.js +1 -0
- package/frontend/build/static/{PercentageDonut-C6I2UOES.js → PercentageDonut-DBDGNJlh.js} +1 -1
- package/frontend/build/static/PermissionButton-B-IfzChn.js +1 -0
- package/frontend/build/static/ReactJSONEditor-DeBI7JPg.js +4 -0
- package/frontend/build/static/RoleCell-DhYvu4YH.js +1 -0
- package/frontend/build/static/Safeguard-DErU6fSK.js +1 -0
- package/frontend/build/static/{SelectSdk-D2NaTubs.js → SelectSdk-Dr_pzQgX.js} +1 -1
- package/frontend/build/static/StoriesPage-frGP1Bfr.js +2 -0
- package/frontend/build/static/{aggregateFeatureMetrics-DBivHCcj.js → aggregateFeatureMetrics-B-67HaIZ.js} +1 -1
- package/frontend/build/static/chartjs-plugin-annotation.esm-DP4wCpdA.js +1 -0
- package/frontend/build/static/differenceInSeconds-DMZGQwjK.js +1 -0
- package/frontend/build/static/endOfMonth-CkSR_DAx.js +1 -0
- package/frontend/build/static/esm-DdgY1Q5s.js +12 -0
- package/frontend/build/static/formatDistanceToNow-CyouiCIY.js +1 -0
- package/frontend/build/static/index-C04TEs4k.js +290 -0
- package/frontend/build/static/{metricsFormatters-BEX2qb8Y.js → metricsFormatters-DhX-aU17.js} +1 -1
- package/frontend/build/static/networkTrafficUsageHighlightPlugin-DlOtHZg3.js +1 -0
- package/frontend/build/static/parse-Chj4PyAg.js +1 -0
- package/frontend/build/static/startOfHour-P0Sr6h8e.js +1 -0
- package/frontend/build/static/themeStyles-DGVpwkcv.js +1 -0
- package/frontend/build/static/{useConditionallyHiddenColumns-DTDzRlyO.js → useConditionallyHiddenColumns-C5q9zdfJ.js} +1 -1
- package/frontend/build/static/useCustomEvent-Dj2V5RVb.js +1 -0
- package/frontend/build/static/{useGroupedImpactMetricsData-CK8Pz2an.js → useGroupedImpactMetricsData-CW9qnV2y.js} +1 -1
- package/frontend/build/static/{useInstanceTrafficMetrics-CIpyIGYi.js → useInstanceTrafficMetrics-CRCDB4TX.js} +1 -1
- package/frontend/package.json +9 -7
- package/package.json +11 -9
- package/frontend/build/static/ChatOutlined-jZlhx14o.js +0 -1
- package/frontend/build/static/CloudCircle-BjnxUYAO.js +0 -1
- package/frontend/build/static/DialogWithAside-BvaGTcqO.js +0 -1106
- package/frontend/build/static/FeatureStaleDialog-BkyjUGR9.js +0 -8
- package/frontend/build/static/FeatureViewLazyExport-C5FggFea.js +0 -10
- package/frontend/build/static/GridLayoutWrapper-D93wkNEo.js +0 -3
- package/frontend/build/static/ImpactViewsPage-DeBga4lU.js +0 -1
- package/frontend/build/static/LazyProjectExport-BkOu6pHf.js +0 -46
- package/frontend/build/static/LifecycleChartComponent-BYvIFr7Q.js +0 -2
- package/frontend/build/static/PermissionButton-BIeM26DH.js +0 -1
- package/frontend/build/static/ReactJSONEditor-C-paZV5Q.js +0 -4
- package/frontend/build/static/RoleCell-BCPNstXC.js +0 -1
- package/frontend/build/static/Safeguard-9zs64Bna.js +0 -1
- package/frontend/build/static/StoriesPage-5lbMiQlA.js +0 -1
- package/frontend/build/static/chartjs-plugin-annotation.esm-BxKcCGhA.js +0 -1
- package/frontend/build/static/esm-CFWP4-MJ.js +0 -15
- package/frontend/build/static/index-BJ2iUk24.js +0 -289
- package/frontend/build/static/networkTrafficUsageHighlightPlugin-DVWh8Lrd.js +0 -1
- package/frontend/build/static/parse-BhYjTMCL.js +0 -1
- package/frontend/build/static/startOfHour-KiLZtdEa.js +0 -1
- package/frontend/build/static/themeStyles-BPY8RNQO.js +0 -1
- package/frontend/build/static/useCustomEvent-CwoY8S5F.js +0 -1
- /package/frontend/build/static/{connect-DbjGV9Hl.png → cr-DbjGV9Hl.png} +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{o as e,t}from"./react-GZhdek4G.js";import{t as n}from"./useTheme-CQqAmDLr.js";import{t as r}from"./jsx-runtime-BnvnyDTF.js";import{v as i}from"./createSimplePaletteValueFilter-BRAMrHWJ.js";import{t as a}from"./Typography-BTdLWIUX.js";import{t as o}from"./Box-BQsxfFmC.js";import{i as s,r as c,t as l}from"./formatDate-cFuM4JYl.js";import{
|
|
2
|
-
`)},title:e=>`Time: ${t>48?s(e[0].label,n.locale,`UTC`):l(e[0].label,n.locale)}`}}},responsive:r,maintainAspectRatio:u,scales:{x:{...o?o.x:{},ticks:{color:e.palette.text.secondary,callback(e){let r=this.getLabelForValue(Number(e));return t>48?c(r,n.locale,`UTC`):l(r,n.locale)}}},y:{...o?.y??{},ticks:{...o?.y?.ticks??{},color:e.palette.text.secondary,callback:w,display:!0}}},elements:i,interaction:a}},L=r(),R=({project:e,flagName:t,onArchive:n,className:r})=>{let{feature:i,refetchFeature:a}=
|
|
1
|
+
import{o as e,t}from"./react-GZhdek4G.js";import{t as n}from"./useTheme-CQqAmDLr.js";import{t as r}from"./jsx-runtime-BnvnyDTF.js";import{v as i}from"./createSimplePaletteValueFilter-BRAMrHWJ.js";import{t as a}from"./Typography-BTdLWIUX.js";import{t as o}from"./Box-BQsxfFmC.js";import{i as s,r as c,t as l}from"./formatDate-cFuM4JYl.js";import{Ft as u,Ho as d,Jt as f,Ko as p,Kt as m,Po as h,Qt as g,fo as _,in as v,nn as y,ns as b,qt as x,rn as S}from"./index-C04TEs4k.js";import{t as C}from"./chartjs-plugin-annotation.esm-DP4wCpdA.js";import{t as w}from"./formatTickValue-DWHZUXee.js";import{i as T,t as E}from"./MarkCompletedDialogue-CcXyp8UE.js";import{i as D,n as O,r as k,t as A}from"./aggregateFeatureMetrics-B-67HaIZ.js";var j=e(t(),1),M=(e,t)=>({datasets:[{label:`Enabled`,hoverBackgroundColor:e.palette.charts.flagMetrics.enabled,backgroundColor:e.palette.charts.flagMetrics.enabled,data:N(t,e=>e.yes)},{label:`Not enabled`,hoverBackgroundColor:e.palette.charts.flagMetrics.notEnabled,backgroundColor:e.palette.charts.flagMetrics.notEnabled,data:N(t,e=>e.no)}]}),N=(e,t)=>e.map(e=>({x:e.timestamp,y:t(e),variants:e.variants||{}})),P=(e,t)=>{if(t===0)return``;let[n,r]=e;return`${r} (${Math.floor(Number(r)/t*100)}%) - ${n}`},F=e=>({plugins:{legend:{position:`top`,labels:{color:e.palette.text.primary,usePointStyle:!0,pointStyle:`none`,boxHeight:0,padding:15}},tooltip:{enabled:!1}},responsive:!0,maintainAspectRatio:!1,scales:{x:{stacked:!0,ticks:{display:!1},grid:{display:!1}},y:{stacked:!0,ticks:{maxTicksLimit:5,display:!1},grid:{color:e.palette.divider},border:{display:!1}}},elements:{bar:{borderRadius:5}},interaction:{mode:`index`,intersect:!1}}),I=(e,t,n)=>{let{responsive:r,elements:i,interaction:a,scales:o,maintainAspectRatio:u}=F(e);return{plugins:{legend:{position:`bottom`,labels:{color:e.palette.text.primary,pointStyle:`circle`,usePointStyle:!0,boxHeight:6,padding:15}},annotation:{clip:!1,annotations:{}},tooltip:{backgroundColor:e.palette.background.paper,titleColor:e.palette.text.primary,bodyColor:e.palette.text.primary,bodySpacing:6,padding:{top:20,bottom:20,left:30,right:30},borderColor:`rgba(0, 0, 0, 0.05)`,borderWidth:3,usePointStyle:!0,caretSize:0,boxPadding:10,callbacks:{label:e=>`${e.formattedValue} - ${e.dataset.label}`,afterLabel:e=>{let t=e.dataset.data[e.dataIndex];if(e.dataset.label!==`Enabled`||t.variants===void 0)return``;let{disabled:n,...r}=t.variants;return Object.entries(r).map(e=>P(e,t.y)).join(`
|
|
2
|
+
`)},title:e=>`Time: ${t>48?s(e[0].label,n.locale,`UTC`):l(e[0].label,n.locale)}`}}},responsive:r,maintainAspectRatio:u,scales:{x:{...o?o.x:{},ticks:{color:e.palette.text.secondary,callback(e){let r=this.getLabelForValue(Number(e));return t>48?c(r,n.locale,`UTC`):l(r,n.locale)}}},y:{...o?.y??{},ticks:{...o?.y?.ticks??{},color:e.palette.text.secondary,callback:w,display:!0}}},elements:i,interaction:a}},L=r(),R=({project:e,flagName:t,onArchive:n,className:r})=>{let{feature:i,refetchFeature:a}=_(e,t),s=i.environments?.map(e=>({name:e.name,lastSeenAt:e.lastSeenAt,enabled:e.enabled,yes:e.yes,no:e.no})),[c,l]=(0,j.useState)(!1),[u,f]=(0,j.useState)(!1);return(0,L.jsxs)(o,{sx:{display:`flex`},className:r,children:[(0,L.jsx)(d,{sx:{pt:0,pb:0},featureLastSeen:i.lastSeenAt,environments:s}),(0,L.jsx)(h,{feature:i,onArchive:()=>l(!0),onComplete:()=>f(!0),onUncomplete:a}),i.children.length>0?(0,L.jsx)(D,{features:i.children,project:e,isOpen:c,onClose:()=>l(!1)}):(0,L.jsx)(T,{isOpen:c,onConfirm:n,onClose:()=>l(!1),projectId:e,featureIds:[t]}),i.project?(0,L.jsx)(E,{isOpen:u,setIsOpen:f,projectId:i.project,featureId:i.name,onComplete:a}):null]})},z=[0,14,28,21,33,31,31,22,26,37,31,14,21,14,0],B=e=>({labels:Array.from({length:15},(e,t)=>t+1),datasets:[{data:z,backgroundColor:e.palette.divider,hoverBackgroundColor:e.palette.divider,label:``}]}),V=i(`div`)({width:`100%`,flexGrow:1}),H=({label:e})=>{let t=n(),r=(0,j.useMemo)(()=>F(t),[t]),i=(0,j.useMemo)(()=>B(t),[t]),o=`placeholder-chart-label`;return(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(a,{id:o,children:e}),(0,L.jsx)(V,{children:(0,L.jsx)(u,{data:i,options:r,"aria-describedby":o})})]})},U=()=>{let e=n(),t=(0,j.useMemo)(()=>F(e),[e]);return(0,L.jsx)(V,{children:(0,L.jsx)(u,{data:(0,j.useMemo)(()=>({labels:[],datasets:[]}),[e]),options:t,"aria-label":`A placeholder bar chart with a single feature flag exposure metrics`})})},W=(e,t)=>{let[n,r]=(0,j.useState)(null),{feature:i}=_(e,t),a=(i?.environments??[]).map(e=>({name:e.name,type:e.type})),o=a.find(e=>e.type===`production`);return(0,j.useEffect)(()=>{o?r(o.name):a.length>0&&r(a[0].name)},[t,JSON.stringify(a)]),{environment:n,setEnvironment:r,activeEnvironments:a}},G=(e,t,r)=>{let i=n(),{featureMetrics:a=[],loading:o,error:s}=k(e,r),c=(0,j.useMemo)(()=>[...a].sort((e,t)=>e.timestamp.localeCompare(t.timestamp)),[a]),l=(0,j.useMemo)(()=>A(c?.filter(e=>t===e.environment)).map(e=>({...e,appName:`all selected`})),[c,t]),u=(0,j.useMemo)(()=>M(i,l),[i,l]),{locationSettings:d}=b();return{data:u,options:(0,j.useMemo)(()=>I(i,r,d),[i,r,d]),loading:o,error:s}},K=({activeEnvironments:e,environment:t,setEnvironment:n})=>(0,L.jsx)(p,{name:`feature-environments`,label:`Environment`,id:`feature-environments`,options:e.map(e=>({key:e.name,label:e.name})),value:String(t),onChange:n}),q=i(o)(({theme:e})=>({display:`flex`,justifyContent:`flex-start`,flexFlow:`row wrap`,gap:e.spacing(2)})),J=i(`div`)(({theme:e})=>({display:`flex`,flexDirection:`column`,gap:e.spacing(3),alignItems:`center`,height:`100%`,justifyContent:`space-between`})),Y=i(R)({alignItems:`center`,justifySelf:`start`}),X=i(`div`)(({theme:e})=>({display:`flex`,justifyContent:`space-between`,flexFlow:`row wrap`,width:`100%`,gap:e.spacing(4)})),Z=e=>(0,L.jsx)(J,{children:(0,L.jsx)(H,{...e})}),Q=({flag:e,onArchive:t})=>{let[n,r]=(0,j.useState)(48),{environment:i,setEnvironment:a,activeEnvironments:o}=W(e.project,e.name),{data:s,options:c,loading:l,error:d}=G(e.name,i,n);if(d)return(0,L.jsx)(J,{children:(0,L.jsx)(H,{label:`Couldn't fetch metrics for the current flag right now. Please try again. Report this if it doesn't resolve itself.`})});let f=s.datasets[0].data.length===0;return(0,L.jsxs)(J,{children:[(0,L.jsxs)(X,{children:[(0,L.jsx)(Y,{project:e.project,flagName:e.name,onArchive:t}),(0,L.jsxs)(q,{children:[i?(0,L.jsx)(K,{environment:i,setEnvironment:a,activeEnvironments:o}):null,(0,L.jsx)(O,{hoursBack:n,setHoursBack:r})]})]}),l?(0,L.jsx)(U,{}):f?(0,L.jsx)(H,{label:`No metrics for this feature flag in the selected environment and time period`}):(0,L.jsx)(V,{children:(0,L.jsx)(u,{data:s,options:c,"aria-label":`A bar chart with a single feature flag exposure metrics`})})]})},$=e=>[`.`,`..`].includes(e.flag.name)?(0,L.jsx)(J,{children:(0,L.jsx)(H,{label:`The current flag name ('${e.flag.name}') is known to cause issues due how it affects URLs. We cannot show you a chart for it.`})}):(0,L.jsx)(Q,{...e});f.register(C,x,g,m,S,v,y);export{$ as FlagMetricsChart,Z as PlaceholderFlagMetricsChartWithWrapper};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./jsx-runtime-BnvnyDTF.js";import{t}from"./ConditionallyRender---uTpMBn.js";import{t as n}from"./Alert-_bLyWbvx.js";import{t as r}from"./Box-BQsxfFmC.js";import{t as i}from"./useUiConfig-DbVjTDpE.js";import{t as a}from"./usePageTitle-CHzzFshF.js";import{
|
|
1
|
+
import{t as e}from"./jsx-runtime-BnvnyDTF.js";import{t}from"./ConditionallyRender---uTpMBn.js";import{t as n}from"./Alert-_bLyWbvx.js";import{t as r}from"./Box-BQsxfFmC.js";import{t as i}from"./useUiConfig-DbVjTDpE.js";import{t as a}from"./usePageTitle-CHzzFshF.js";import{Ft as o,Jt as s,Kt as c,Qt as l,in as u,nn as d,qt as f,rn as p}from"./index-C04TEs4k.js";import{a as m,i as h,l as g,n as _,s as v,t as y,u as b}from"./networkTrafficUsageHighlightPlugin-DlOtHZg3.js";import{t as x}from"./chartjs-plugin-annotation.esm-DP4wCpdA.js";var S=e(),C=()=>{a(`Network - Frontend Traffic Usage`);let{isOss:e}=i(),{chartDataSelection:s,setChartDataSelection:c,options:l}=_(),{chartData:u}=v(s);return(0,S.jsx)(t,{condition:e(),show:(0,S.jsx)(n,{severity:`warning`,children:`Not enabled.`}),elseShow:(0,S.jsx)(S.Fragment,{children:(0,S.jsxs)(h,{children:[(0,S.jsxs)(m,{children:[(0,S.jsx)(r,{children:(0,S.jsx)(n,{severity:`info`,icon:!1,children:`Frontend traffic is determined by the total SDK requests to the Frontend API`})}),(0,S.jsx)(b,{selectedPeriod:s,setPeriod:c})]}),(0,S.jsx)(o,{data:u,plugins:[y],options:l,"aria-label":g(s)})]})})})};s.register(x,f,l,c,p,u,d);export{C as default};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import{a as e,i as t,n,o as r,r as i,t as a}from"./react-GZhdek4G.js";import{p as o}from"./Grow-BIbmvKVy.js";import{c as s}from"./chunk-QUQL4437-Dr42NpoL.js";import{O as c,t as l}from"./useTheme-CQqAmDLr.js";import{t as u}from"./jsx-runtime-BnvnyDTF.js";import{v as d}from"./createSimplePaletteValueFilter-BRAMrHWJ.js";import{t as f}from"./useMediaQuery-DGx8zAkf.js";import{T as p,b as m,r as h,t as g}from"./TextField-oipjeg6n.js";import{n as _}from"./ConditionallyRender---uTpMBn.js";import{t as v}from"./Alert-_bLyWbvx.js";import{t as y}from"./Typography-BTdLWIUX.js";import{t as b}from"./Box-BQsxfFmC.js";import{t as x}from"./Button-CebB8EPB.js";import{t as S}from"./Dialog-C-xQxqWX.js";import{t as C}from"./FormControlLabel-F5gDLixN.js";import{n as w,o as T}from"./TooltipResolver-4A1YhwBy.js";import{n as E}from"./formatPath-j72gcKwy.js";import{G as D}from"./PermissionButton-B-IfzChn.js";import{n as O,o as ee}from"./useCustomEvent-Dj2V5RVb.js";import{r as k}from"./FileCopy-B8HZEA83.js";import{n as A,t as j}from"./useApiGetter-7FP8Avm4.js";import{i as M,n as N}from"./metricsFormatters-DhX-aU17.js";import{A as P,Ja as F,N as I,O as te,P as ne,Xs as L,hs as re,j as R,no as z}from"./index-C04TEs4k.js";var B=u(),ie=({formData:e,actions:t,metrics:n,loading:r,labelsFilter:i})=>{let{pathname:a}=s(),o=a.includes(`/impact-metrics`)?`impact-metrics-page`:`flag-impact-metrics-accordion`;return(0,B.jsxs)(b,{children:[(0,B.jsxs)(b,{sx:e=>({display:`flex`,flexDirection:`column`,gap:e.spacing(3)}),children:[(0,B.jsx)(te,{value:e.metricName,valueSource:e.source,onChange:t.handleSeriesChange,options:n,loading:r,entryPoint:o}),i,e.metricName?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(R,{value:e.timeRange,onChange:t.setTimeRange,children:[(0,B.jsx)(h,{value:`hour`,children:`Last hour`}),(0,B.jsx)(h,{value:`day`,children:`Last 24 hours`}),(0,B.jsx)(h,{value:`week`,children:`Last 7 days`}),(0,B.jsx)(h,{value:`month`,children:`Last 30 days`})]}),(0,B.jsx)(P,{value:e.aggregationMode,onChange:t.setAggregationMode,metricType:e.metricType})]}):null]}),e.metricName?(0,B.jsx)(C,{sx:e=>({margin:e.spacing(1.5,0)}),control:(0,B.jsx)(L,{checked:e.yAxisMin===`zero`,onChange:e=>t.setYAxisMin(e.target.checked?`zero`:`auto`)}),label:`Begin at zero`}):null]})},V=r(a(),1),ae=({open:e,initialConfig:t})=>{let[n,r]=(0,V.useState)(t?.title||``),[i,a]=(0,V.useState)(t?.metricName||``),[o,s]=(0,V.useState)(t?.timeRange||`day`),[c,l]=(0,V.useState)(t?.yAxisMin||`auto`),[u,d]=(0,V.useState)(t?.labelSelectors||{}),[f,p]=(0,V.useState)(t?.aggregationMode||N(M(i))),[m,h]=(0,V.useState)(t?.source),{data:{labels:g}}=ne(i?{metricName:i,range:o,aggregationMode:f,source:m,mode:`edit`}:void 0);(0,V.useEffect)(()=>{e&&t?(r(t.title||``),a(t.metricName),s(t.timeRange),l(t.yAxisMin),d(t.labelSelectors),p(t.aggregationMode||N(M(t.metricName))),h(t.source)):e&&!t&&(r(``),a(``),s(`day`),l(`auto`),d({}),p(`count`),h(void 0))},[e,t]);let _=e=>{a(e.metricName),h(e.source),d({});let t=M(e.metricName);t!==`unknown`&&p(N(t))},v=()=>({title:n||void 0,metricName:i,timeRange:o,yAxisMin:c,labelSelectors:u,aggregationMode:f,source:m}),y=i.length>0,b=M(i,g?.metric_type);return(0,V.useEffect)(()=>{i!==t?.metricName&&b!==`unknown`&&p(N(b))},[i,b]),{formData:{title:n,metricName:i,metricType:b,timeRange:o,yAxisMin:c,aggregationMode:f,labelSelectors:u,source:m},actions:{setTitle:r,setMetricName:a,setTimeRange:s,setYAxisMin:l,setAggregationMode:p,setLabelSelectors:d,handleSeriesChange:_,getConfigToSave:v},isValid:y,currentAvailableLabels:g}},oe=()=>{let e=`api/admin/impact-metrics/config`,{data:t,refetch:n,loading:r,error:i}=A(E(e),()=>j(E(e),`impactMetricsConfig`));return{configs:t?.configs||[],refetch:n,loading:r,error:i}},se=e=>{let t=e?`api/admin/projects/${e.projectId}/features/${e.featureName}/impact-metrics/config`:`api/admin/impact-metrics/config`,{makeRequest:n,createRequest:r,errors:i,loading:a}=w({propagateErrors:!0});return{createImpactMetric:(0,V.useCallback)(async e=>{let i=r(t,{method:`POST`,body:JSON.stringify(e)},`updateImpactMetric`);return n(i.caller,i.id)},[n,r]),deleteImpactMetric:(0,V.useCallback)(async e=>{let i=r(`${t}/${e}`,{method:`DELETE`},`deleteImpactMetric`);return n(i.caller,i.id)},[n,r,t]),errors:i,loading:a}},ce=()=>{let{configs:e,loading:t,error:n,refetch:r}=oe(),{layout:i,charts:a}=(0,V.useMemo)(()=>({layout:e.map((e,t)=>{let n=t%2,r=Math.floor(t/2);return{i:e.id,x:n*6,y:r*2,w:6,h:2,minW:4,minH:2,maxW:12,maxH:8}}),charts:e}),[e]),{createImpactMetric:o,deleteImpactMetric:s,loading:c,errors:l}=se(),u=(0,V.useCallback)(async e=>{await o(e),r()},[o,r]),d=(0,V.useCallback)(async(e,t)=>{await o({...t,id:e}),r()},[e,o,r]),f=(0,V.useCallback)(async e=>{await s(e),r()},[e,s,r]);return{charts:a,layout:i,loading:t||c,error:n||Object.keys(l).length>0?l:void 0,addChart:u,updateChart:d,deleteChart:f}},le=({labelKey:e,options:t,value:n,onChange:r})=>{let i=n.includes(`*`),a=`autocomplete-${e}`,o=t.length>=1e3;return(0,B.jsx)(m,{multiple:!0,disableCloseOnSelect:!0,id:a,options:[`*`,...t],value:i?t:n,getOptionLabel:e=>e===`*`?`(Select all)`:e,onChange:(e,t,n,a)=>{if(a?.option===`*`){r(i?[]:[`*`]);return}r(t.filter(e=>e!==`*`))},renderOption:(e,t,{selected:n})=>{let{key:r,...a}=e;return(0,B.jsxs)(`li`,{...a,children:[(0,B.jsx)(L,{size:`small`,checked:t===`*`?i:n,style:{marginRight:8}}),t===`*`?(0,B.jsx)(y,{component:`span`,sx:{color:`text.secondary`},children:`Select all`}):t]},r||t)},renderValue:(e,t)=>{let n=e.slice(-5),r=e.length-5;return(0,B.jsxs)(B.Fragment,{children:[n.map((e,n)=>{let{key:r,...i}=t({index:n});return(0,V.createElement)(p,{...i,key:r,label:e,size:`small`})}),r>0?(0,B.jsxs)(y,{component:`span`,sx:{color:`text.secondary`},children:[` `,`(+`,r,`)`]}):null]})},renderInput:t=>(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(g,{...t,label:e,placeholder:i?void 0:`Select values…`,variant:`outlined`,size:`small`}),o&&(0,B.jsx)(v,{severity:`warning`,sx:e=>({padding:e.spacing(1,2),marginTop:e.spacing(1)}),children:`Maximum of 1000 values loaded due to performance.`})]})})},ue=d(b)(({theme:e})=>({display:`flex`,flexDirection:`column`,gap:e.spacing(1),width:`100%`})),de=d(b)(({theme:e})=>({width:`100%`,display:`flex`,alignItems:`center`,gap:e.spacing(1)})),fe=d(b)(({theme:e})=>({display:`grid`,gridTemplateColumns:`repeat(auto-fill, minmax(250px, 1fr))`,gap:e.spacing(2),flexGrow:1})),pe=d(b)({display:`flex`,flexDirection:`column`,flexGrow:1}),me=d(y)({lineHeight:1.5,height:`24px`}),he=d(p)(({theme:e})=>({position:`relative`,height:`20px`,margin:e.spacing(-1,0)})),H=({title:e,labels:t,labelSelectors:n,onLabelChange:r,onAllToggle:i,onChange:a})=>{let o=t.map(([e])=>e),s=o.some(e=>n[e]);return(0,B.jsxs)(ue,{children:[(0,B.jsxs)(de,{children:[(0,B.jsx)(me,{variant:`subtitle2`,children:e}),s&&(0,B.jsx)(he,{label:`Clear all`,size:`small`,variant:`outlined`,onClick:()=>{let e={};Object.entries(n).forEach(([t,n])=>{o.includes(t)||(e[t]=n)}),a(e)}})]}),(0,B.jsx)(fe,{children:t.map(([e,t])=>(0,B.jsx)(pe,{children:(0,B.jsx)(le,{labelKey:e,options:t,value:n[e]||[],onChange:t=>r(e,t),handleAllToggle:i})},e))})]})},U=[`environment`,`appName`,`origin`],W=({labelSelectors:e,onChange:t,availableLabels:n})=>{let r=(n,r)=>{let i={...e};r.length===0?delete i[n]:i[n]=r,t(i)},i=(n,r)=>{let i={...e};r?i[n]=[`*`]:delete i[n],t(i)};if(!n||Object.keys(n).length===0)return null;let a=Object.entries(n).filter(([e])=>U.includes(e)).sort(),o=Object.entries(n).filter(([e])=>!U.includes(e)&&e!==`type`&&e!==`metric_type`).sort();return(0,B.jsxs)(b,{sx:{display:`flex`,gap:2,flexWrap:`wrap`},children:[a.length>0&&(0,B.jsx)(H,{title:`Filter by labels`,labels:a,labelSelectors:e,onLabelChange:r,onAllToggle:i,onChange:t}),o.length>0&&(0,B.jsx)(H,{title:`Other filters`,labels:o,labelSelectors:e,onLabelChange:r,onAllToggle:i,onChange:t})]})},ge=d(S)(({theme:e})=>({"& .MuiDialog-paper":{borderRadius:e.shape.borderRadiusLarge,maxWidth:e.spacing(170),width:`100%`,backgroundColor:`transparent`},padding:0,"& .MuiPaper-root > section":{overflowX:`hidden`}})),G=d(`form`)({display:`flex`,flexDirection:`column`,height:`100%`}),K=d(`h1`)(({theme:e})=>({fontWeight:`normal`,fontSize:e.typography.h1.fontSize,margin:0})),q=d(`div`)(({theme:e})=>({display:`flex`,flexDirection:`column`,gap:e.spacing(3),padding:e.spacing(6),flexGrow:1,minHeight:600})),J=d(`div`)(({theme:e})=>({display:`flex`,gap:e.spacing(3),justifyContent:`flex-end`,padding:e.spacing(4,6),borderTop:`1px solid ${e.palette.divider}`})),Y=d(y)(({theme:e})=>({fontWeight:e.typography.fontWeightBold,color:e.palette.common.white,marginBottom:e.spacing(1)})),_e=d(`a`)(({theme:e})=>({color:e.palette.common.white,display:`flex`,alignItems:`center`,gap:e.spacing(1),marginTop:e.spacing(1.5),textDecoration:`underline`,"&:hover":{textDecoration:`none`}})),ve=d(y)(({theme:e})=>({fontWeight:e.typography.fontWeightBold,color:e.palette.common.white,marginBottom:e.spacing(1.5)})),ye=d(b)(({theme:e})=>({borderRadius:e.shape.borderRadiusLarge,overflow:`hidden`,backgroundColor:e.palette.background.paper,padding:e.spacing(2)})),be=({open:e,onClose:t,onSave:n,initialConfig:r,metrics:i,loading:a=!1})=>{let{formData:o,actions:s,isValid:c,currentAvailableLabels:u}=ae({open:e,initialConfig:r}),d=f(l().breakpoints.down(`lg`)),{trackEvent:p}=T(),m=()=>{c&&(n(s.getConfigToSave()),p(`impact-metrics`,{props:{eventType:`chart added`}}),t())};return(0,B.jsx)(ge,{open:e,onClose:t,children:(0,B.jsx)(O,{compact:!0,disablePadding:!0,description:(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(Y,{children:`Did you know?`}),`Impact metrics let you track how your feature rollouts affect key outcomes like error rates, latency, and adoption — directly inside Unleash.`,(0,B.jsxs)(_e,{href:`https://docs.getunleash.io/concepts/impact-metrics`,target:`_blank`,rel:`noopener noreferrer`,onClick:()=>{p(`impact-metrics`,{props:{eventType:`sidebar docs clicked`}})},children:[(0,B.jsx)(k,{fontSize:`small`}),`Learn how to use impact metrics`]}),(0,B.jsxs)(b,{sx:{mt:3},children:[(0,B.jsx)(ve,{children:`Preview chart`}),(0,B.jsx)(ye,{children:(0,B.jsx)(I,{metricName:o.metricName,timeRange:o.timeRange,labelSelectors:o.labelSelectors,yAxisMin:o.yAxisMin,aggregationMode:o.aggregationMode,source:o.source,isPreview:!0},d?`small`:`large`)})]})]}),showLink:!1,sidebarWidth:`55%`,children:(0,B.jsxs)(G,{onSubmit:e=>{e.preventDefault(),m()},children:[(0,B.jsxs)(q,{children:[(0,B.jsx)(K,{children:r?`Edit impact metric`:`Add impact metric`}),(0,B.jsx)(g,{label:`Chart Title (optional)`,value:o.title,onChange:e=>s.setTitle(e.target.value),fullWidth:!0,variant:`outlined`,size:`small`}),(0,B.jsx)(ie,{formData:o,actions:s,metrics:i,loading:a,labelsFilter:u?(0,B.jsx)(W,{labelSelectors:o.labelSelectors,onChange:s.setLabelSelectors,availableLabels:u}):null})]}),(0,B.jsxs)(J,{children:[(0,B.jsx)(x,{onClick:t,children:`Cancel`}),(0,B.jsx)(x,{variant:`contained`,type:`submit`,disabled:!c,children:r?`Update`:`Add impact metric`})]})]})})})},xe=e=>{let t=[];e.displayName&&t.push(`${e.displayName}`),t.push(`last ${e.timeRange}`),t.push(e.aggregationMode);let n=Object.keys(e.labelSelectors).length;return n>0&&t.push(`${n} filter${n>1?`s`:``}`),t.join(` • `)},Se=d(_)(({theme:e})=>({borderRadius:`${e.shape.borderRadiusMedium}px`,boxShadow:`none`,display:`flex`,flexDirection:`column`,height:`100%`})),Ce=d(b)({flex:1,display:`flex`,flexDirection:`column`,minHeight:0}),we=d(b)(({theme:e})=>({position:`relative`,minWidth:0,flexGrow:1,height:`100%`,display:`flex`,flexDirection:`column`,margin:`auto 0`,padding:e.spacing(3)})),Te=d(b)(({theme:e})=>({display:`flex`,gap:e.spacing(1),alignItems:`center`,padding:e.spacing(1.5,2),borderBottom:`1px solid ${e.palette.divider}`})),Ee=d(b)(({theme:e})=>({display:`flex`,flexDirection:`column`,justifyContent:`flex-end`,flexGrow:1,overflow:`hidden`,textOverflow:`ellipsis`})),De=d(b)(({theme:e})=>({marginLeft:`auto`,display:`flex`,alignItems:`center`,gap:e.spacing(.5)})),Oe=d(re)(({theme:e})=>({alignSelf:`start`,color:e.palette.primary.main,marginTop:e.spacing(.25)})),ke=({config:e,onEdit:t,onDelete:n,permission:r=D,projectId:i,dragHandle:a,icon:o})=>(0,B.jsxs)(Se,{children:[(0,B.jsxs)(Te,{children:[a,e.mode===`read`?(0,B.jsx)(Oe,{}):null,(0,B.jsxs)(Ee,{children:[e.title&&(0,B.jsx)(y,{variant:`h3`,children:e.title}),(0,B.jsx)(y,{variant:`body2`,sx:{color:`text.secondary`},children:xe(e)})]}),o,e.mode!==`read`&&(0,B.jsxs)(De,{children:[(0,B.jsx)(z,{onClick:()=>t(e),permission:r,projectId:i,tooltipProps:{title:`Edit chart`},children:(0,B.jsx)(ee,{})}),(0,B.jsx)(z,{onClick:()=>n(e.id),permission:r,projectId:i,tooltipProps:{title:`Remove chart`},children:(0,B.jsx)(F,{})})]})]}),(0,B.jsx)(Ce,{children:(0,B.jsx)(we,{children:(0,B.jsx)(I,{metricName:e.metricName,timeRange:e.timeRange,labelSelectors:e.labelSelectors,yAxisMin:e.yAxisMin,aggregationMode:e.aggregationMode,source:e.source,aspectRatio:1.5,overrideOptions:{maintainAspectRatio:!1},emptyDataDescription:`Send impact metrics using Unleash SDK for this series to view the chart.`})})})]}),Ae=n(((e,t)=>{(function(n,r){typeof e==`object`&&t!==void 0?r(e):typeof define==`function`&&define.amd?define([`exports`],r):(n=typeof globalThis<`u`?globalThis:n||self,r(n[`fast-equals`]={}))})(e,(function(e){function t(e){return function(t,n,r,i,a,o,s){return e(t,n,s)}}function n(e){return function(t,n,r,i){if(!t||!n||typeof t!=`object`||typeof n!=`object`)return e(t,n,r,i);var a=i.get(t),o=i.get(n);if(a&&o)return a===n&&o===t;i.set(t,n),i.set(n,t);var s=e(t,n,r,i);return i.delete(t),i.delete(n),s}}function r(e,t){var n={};for(var r in e)n[r]=e[r];for(var r in t)n[r]=t[r];return n}function i(e){return e.constructor===Object||e.constructor==null}function a(e){return typeof e.then==`function`}function o(e,t){return e===t||e!==e&&t!==t}var s=`[object Arguments]`,c=`[object Boolean]`,l=`[object Date]`,u=`[object RegExp]`,d=`[object Map]`,f=`[object Number]`,p=`[object Object]`,m=`[object Set]`,h=`[object String]`,g=Object.prototype.toString;function _(e){var t=e.areArraysEqual,n=e.areDatesEqual,r=e.areMapsEqual,_=e.areObjectsEqual,v=e.areRegExpsEqual,y=e.areSetsEqual,b=e.createIsNestedEqual,x=b(S);function S(e,b,S){if(e===b)return!0;if(!e||!b||typeof e!=`object`||typeof b!=`object`)return e!==e&&b!==b;if(i(e)&&i(b))return _(e,b,x,S);var C=Array.isArray(e),w=Array.isArray(b);if(C||w)return C===w&&t(e,b,x,S);var T=g.call(e);return T===g.call(b)?T===l?n(e,b,x,S):T===u?v(e,b,x,S):T===d?r(e,b,x,S):T===m?y(e,b,x,S):T===p||T===s?a(e)||a(b)?!1:_(e,b,x,S):T===c||T===f||T===h?o(e.valueOf(),b.valueOf()):!1:!1}return S}function v(e,t,n,r){var i=e.length;if(t.length!==i)return!1;for(;i-- >0;)if(!n(e[i],t[i],i,i,e,t,r))return!1;return!0}var y=n(v);function b(e,t){return o(e.valueOf(),t.valueOf())}function x(e,t,n,r){var i=e.size===t.size;if(!i)return!1;if(!e.size)return!0;var a={},o=0;return e.forEach(function(s,c){if(i){var l=!1,u=0;t.forEach(function(i,d){!l&&!a[u]&&(l=n(c,d,o,u,e,t,r)&&n(s,i,c,d,e,t,r))&&(a[u]=!0),u++}),o++,i=l}}),i}var S=n(x),C=`_owner`,w=Object.prototype.hasOwnProperty;function T(e,t,n,r){var i=Object.keys(e),a=i.length;if(Object.keys(t).length!==a)return!1;for(var o;a-- >0;){if(o=i[a],o===C){var s=!!e.$$typeof,c=!!t.$$typeof;if((s||c)&&s!==c)return!1}if(!w.call(t,o)||!n(e[o],t[o],o,o,e,t,r))return!1}return!0}var E=n(T);function D(e,t){return e.source===t.source&&e.flags===t.flags}function O(e,t,n,r){var i=e.size===t.size;if(!i)return!1;if(!e.size)return!0;var a={};return e.forEach(function(o,s){if(i){var c=!1,l=0;t.forEach(function(i,u){!c&&!a[l]&&(c=n(o,i,s,u,e,t,r))&&(a[l]=!0),l++}),i=c}}),i}var ee=n(O),k=Object.freeze({areArraysEqual:v,areDatesEqual:b,areMapsEqual:x,areObjectsEqual:T,areRegExpsEqual:D,areSetsEqual:O,createIsNestedEqual:t}),A=Object.freeze({areArraysEqual:y,areDatesEqual:b,areMapsEqual:S,areObjectsEqual:E,areRegExpsEqual:D,areSetsEqual:ee,createIsNestedEqual:t}),j=_(k);function M(e,t){return j(e,t,void 0)}var N=_(r(k,{createIsNestedEqual:function(){return o}}));function P(e,t){return N(e,t,void 0)}var F=_(A);function I(e,t){return F(e,t,new WeakMap)}var te=_(r(A,{createIsNestedEqual:function(){return o}}));function ne(e,t){return te(e,t,new WeakMap)}function L(e){return _(r(k,e(k)))}function re(e){var t=_(r(A,e(A)));return(function(e,n,r){return r===void 0&&(r=new WeakMap),t(e,n,r)})}e.circularDeepEqual=I,e.circularShallowEqual=ne,e.createCustomCircularEqual=re,e.createCustomEqual=L,e.deepEqual=M,e.sameValueZeroEqual=o,e.shallowEqual=P,Object.defineProperty(e,"__esModule",{value:!0})}))})),X=n(((e,t)=>{function n(e){var t,r,i=``;if(typeof e==`string`||typeof e==`number`)i+=e;else if(typeof e==`object`)if(Array.isArray(e)){var a=e.length;for(t=0;t<a;t++)e[t]&&(r=n(e[t]))&&(i&&(i+=` `),i+=r)}else for(r in e)e[r]&&(i&&(i+=` `),i+=r);return i}function r(){for(var e,t,r=0,i=``,a=arguments.length;r<a;r++)(e=arguments[r])&&(t=n(e))&&(i&&(i+=` `),i+=t);return i}t.exports=r,t.exports.clsx=r})),je=n(((e,t)=>{t.exports=function(e,t,n){return e===t?!0:e.className===t.className&&n(e.style,t.style)&&e.width===t.width&&e.autoSize===t.autoSize&&e.cols===t.cols&&e.draggableCancel===t.draggableCancel&&e.draggableHandle===t.draggableHandle&&n(e.verticalCompact,t.verticalCompact)&&n(e.compactType,t.compactType)&&n(e.layout,t.layout)&&n(e.margin,t.margin)&&n(e.containerPadding,t.containerPadding)&&e.rowHeight===t.rowHeight&&e.maxRows===t.maxRows&&e.isBounded===t.isBounded&&e.isDraggable===t.isDraggable&&e.isResizable===t.isResizable&&e.allowOverlap===t.allowOverlap&&e.preventCollision===t.preventCollision&&e.useCSSTransforms===t.useCSSTransforms&&e.transformScale===t.transformScale&&e.isDroppable===t.isDroppable&&n(e.resizeHandles,t.resizeHandles)&&n(e.resizeHandle,t.resizeHandle)&&e.onLayoutChange===t.onLayoutChange&&e.onDragStart===t.onDragStart&&e.onDrag===t.onDrag&&e.onDragStop===t.onDragStop&&e.onResizeStart===t.onResizeStart&&e.onResize===t.onResize&&e.onResizeStop===t.onResizeStop&&e.onDrop===t.onDrop&&n(e.droppingItem,t.droppingItem)&&n(e.innerRef,t.innerRef)}})),Z=n((e=>{Object.defineProperty(e,"__esModule",{value:!0}),e.bottom=u,e.childrenEqual=h,e.cloneLayout=d,e.cloneLayoutItem=m,e.collides=_,e.compact=v,e.compactItem=x,e.compactType=ae,e.correctBounds=S,e.fastPositionEqual=g,e.fastRGLPropsEqual=void 0,e.getAllCollisions=T,e.getFirstCollision=w,e.getLayoutItem=C,e.getStatics=E,e.modifyLayout=f,e.moveElement=D,e.moveElementAwayFromCollision=O,e.noop=void 0,e.perc=ee,e.resizeItemInDirection=ne,e.setTopLeft=re,e.setTransform=L,e.sortLayoutItems=R,e.sortLayoutItemsByColRow=B,e.sortLayoutItemsByRowCol=z,e.synchronizeLayoutWithChildren=ie,e.validateLayout=V,e.withLayoutItem=p;var t=Ae(),n=r(a());function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?i(Object(n),!0).forEach(function(t){s(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function s(e,t,n){return(t=c(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function c(e){var t=l(e,`string`);return typeof t==`symbol`?t:t+``}function l(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function u(e){let t=0,n;for(let r=0,i=e.length;r<i;r++)n=e[r].y+e[r].h,n>t&&(t=n);return t}function d(e){let t=Array(e.length);for(let n=0,r=e.length;n<r;n++)t[n]=m(e[n]);return t}function f(e,t){let n=Array(e.length);for(let r=0,i=e.length;r<i;r++)t.i===e[r].i?n[r]=t:n[r]=e[r];return n}function p(e,t,n){let r=C(e,t);return r?(r=n(m(r)),e=f(e,r),[e,r]):[e,null]}function m(e){return{w:e.w,h:e.h,x:e.x,y:e.y,i:e.i,minW:e.minW,maxW:e.maxW,minH:e.minH,maxH:e.maxH,moved:!!e.moved,static:!!e.static,isDraggable:e.isDraggable,isResizable:e.isResizable,resizeHandles:e.resizeHandles,isBounded:e.isBounded}}function h(e,r){return(0,t.deepEqual)(n.default.Children.map(e,e=>e?.key),n.default.Children.map(r,e=>e?.key))&&(0,t.deepEqual)(n.default.Children.map(e,e=>e?.props[`data-grid`]),n.default.Children.map(r,e=>e?.props[`data-grid`]))}e.fastRGLPropsEqual=je();function g(e,t){return e.left===t.left&&e.top===t.top&&e.width===t.width&&e.height===t.height}function _(e,t){return!(e.i===t.i||e.x+e.w<=t.x||e.x>=t.x+t.w||e.y+e.h<=t.y||e.y>=t.y+t.h)}function v(e,t,n,r){let i=E(e),a=u(i),o=R(e,t),s=Array(e.length);for(let c=0,l=o.length;c<l;c++){let l=m(o[c]);l.static||(l=x(i,l,t,n,o,r,a),a=Math.max(a,l.y+l.h),i.push(l)),s[e.indexOf(o[c])]=l,l.moved=!1}return s}var y={x:`w`,y:`h`};function b(e,t,n,r){let i=y[r];t[r]+=1;let a=e.map(e=>e.i).indexOf(t.i);for(let o=a+1;o<e.length;o++){let a=e[o];if(!a.static){if(a.y>t.y+t.h)break;_(t,a)&&b(e,a,n+t[i],r)}}t[r]=n}function x(e,t,n,r,i,a,o){let s=n===`vertical`,c=n===`horizontal`;if(s)for(typeof o==`number`?t.y=Math.min(o,t.y):t.y=Math.min(u(e),t.y);t.y>0&&!w(e,t);)t.y--;else if(c)for(;t.x>0&&!w(e,t);)t.x--;let l;for(;(l=w(e,t))&&!(n===null&&a);)if(c?b(i,t,l.x+l.w,`x`):b(i,t,l.y+l.h,`y`),c&&t.x+t.w>r)for(t.x=r-t.w,t.y++;t.x>0&&!w(e,t);)t.x--;return t.y=Math.max(t.y,0),t.x=Math.max(t.x,0),t}function S(e,t){let n=E(e);for(let r=0,i=e.length;r<i;r++){let i=e[r];if(i.x+i.w>t.cols&&(i.x=t.cols-i.w),i.x<0&&(i.x=0,i.w=t.cols),!i.static)n.push(i);else for(;w(n,i);)i.y++}return e}function C(e,t){for(let n=0,r=e.length;n<r;n++)if(e[n].i===t)return e[n]}function w(e,t){for(let n=0,r=e.length;n<r;n++)if(_(e[n],t))return e[n]}function T(e,t){return e.filter(e=>_(e,t))}function E(e){return e.filter(e=>e.static)}function D(e,t,n,r,i,a,o,s,c){if(t.static&&t.isDraggable!==!0||t.y===r&&t.x===n)return e;`${t.i}${String(n)}${String(r)}${t.x}${t.y}`;let l=t.x,u=t.y;typeof n==`number`&&(t.x=n),typeof r==`number`&&(t.y=r),t.moved=!0;let f=R(e,o);(o===`vertical`&&typeof r==`number`?u>=r:o===`horizontal`&&typeof n==`number`&&l>=n)&&(f=f.reverse());let p=T(f,t),m=p.length>0;if(m&&c)return d(e);if(m&&a)return`${t.i}`,t.x=l,t.y=u,t.moved=!1,e;for(let n=0,r=p.length;n<r;n++){let r=p[n];`${t.i}${t.x}${t.y}${r.i}${r.x}${r.y}`,!r.moved&&(e=r.static?O(e,r,t,i,o,s):O(e,t,r,i,o,s))}return e}function O(e,t,n,r,i,a){let o=i===`horizontal`,s=i===`vertical`,c=t.static;if(r){r=!1;let l={x:o?Math.max(t.x-n.w,0):n.x,y:s?Math.max(t.y-n.h,0):n.y,w:n.w,h:n.h,i:`-1`},u=w(e,l),d=u&&u.y+u.h>t.y,f=u&&t.x+t.w>u.x;if(!u)return`${n.i}${l.x}${l.y}`,D(e,n,o?l.x:void 0,s?l.y:void 0,r,c,i,a);if(d&&s)return D(e,n,void 0,n.y+1,r,c,i,a);if(d&&i==null)return t.y=n.y,n.y+=n.h,e;if(f&&o)return D(e,t,n.x,void 0,r,c,i,a)}let l=o?n.x+1:void 0,u=s?n.y+1:void 0;return l==null&&u==null?e:D(e,n,o?n.x+1:void 0,s?n.y+1:void 0,r,c,i,a)}function ee(e){return e*100+`%`}var k=(e,t,n,r)=>e+n>r?t:n,A=(e,t,n)=>e<0?t:n,j=e=>Math.max(0,e),M=e=>Math.max(0,e),N=(e,t,n)=>{let{left:r,height:i,width:a}=t,o=e.top-(i-e.height);return{left:r,width:a,height:A(o,e.height,i),top:M(o)}},P=(e,t,n)=>{let{top:r,left:i,height:a,width:o}=t;return{top:r,height:a,width:k(e.left,e.width,o,n),left:j(i)}},F=(e,t,n)=>{let{top:r,height:i,width:a}=t,o=e.left-(a-e.width);return{height:i,width:o<0?e.width:k(e.left,e.width,a,n),top:M(r),left:j(o)}},I=(e,t,n)=>{let{top:r,left:i,height:a,width:o}=t;return{width:o,left:i,height:A(r,e.height,a),top:M(r)}},te={n:N,ne:function(){return N(arguments.length<=0?void 0:arguments[0],P(...arguments),arguments.length<=2?void 0:arguments[2])},e:P,se:function(){return I(arguments.length<=0?void 0:arguments[0],P(...arguments),arguments.length<=2?void 0:arguments[2])},s:I,sw:function(){return I(arguments.length<=0?void 0:arguments[0],F(...arguments),arguments.length<=2?void 0:arguments[2])},w:F,nw:function(){return N(arguments.length<=0?void 0:arguments[0],F(...arguments),arguments.length<=2?void 0:arguments[2])}};function ne(e,t,n,r){let i=te[e];return i?i(t,o(o({},t),n),r):n}function L(e){let{top:t,left:n,width:r,height:i}=e,a=`translate(${n}px,${t}px)`;return{transform:a,WebkitTransform:a,MozTransform:a,msTransform:a,OTransform:a,width:`${r}px`,height:`${i}px`,position:`absolute`}}function re(e){let{top:t,left:n,width:r,height:i}=e;return{top:`${t}px`,left:`${n}px`,width:`${r}px`,height:`${i}px`,position:`absolute`}}function R(e,t){return t===`horizontal`?B(e):t===`vertical`?z(e):e}function z(e){return e.slice(0).sort(function(e,t){return e.y>t.y||e.y===t.y&&e.x>t.x?1:e.y===t.y&&e.x===t.x?0:-1})}function B(e){return e.slice(0).sort(function(e,t){return e.x>t.x||e.x===t.x&&e.y>t.y?1:-1})}function ie(e,t,r,i,a){e||=[];let s=[];n.default.Children.forEach(t,t=>{if(t?.key==null)return;let n=C(e,String(t.key)),r=t.props[`data-grid`];n&&r==null?s.push(m(n)):r?s.push(m(o(o({},r),{},{i:t.key}))):s.push(m({w:1,h:1,x:0,y:u(s),i:String(t.key)}))});let c=S(s,{cols:r});return a?c:v(c,i,r)}function V(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:`Layout`,n=[`x`,`y`,`w`,`h`];if(!Array.isArray(e))throw Error(t+` must be an array!`);for(let r=0,i=e.length;r<i;r++){let i=e[r];for(let e=0;e<n.length;e++){let a=n[e],o=i[a];if(typeof o!=`number`||Number.isNaN(o))throw Error(`ReactGridLayout: ${t}[${r}].${a} must be a number! Received: ${o} (${typeof o})`)}if(i.i!==void 0&&typeof i.i!=`string`)throw Error(`ReactGridLayout: ${t}[${r}].i must be a string! Received: ${i.i} (${typeof i.i})`)}}function ae(e){let{verticalCompact:t,compactType:n}=e||{};return t===!1?null:n}e.noop=()=>{}})),Me=n((e=>{Object.defineProperty(e,"__esModule",{value:!0}),e.calcGridColWidth=t,e.calcGridItemPosition=r,e.calcGridItemWHPx=n,e.calcWH=a,e.calcXY=i,e.clamp=o;function t(e){let{margin:t,containerPadding:n,containerWidth:r,cols:i}=e;return(r-t[0]*(i-1)-n[0]*2)/i}function n(e,t,n){return Number.isFinite(e)?Math.round(t*e+Math.max(0,e-1)*n):e}function r(e,r,i,a,o,s){let{margin:c,containerPadding:l,rowHeight:u}=e,d=t(e),f={};return s&&s.resizing?(f.width=Math.round(s.resizing.width),f.height=Math.round(s.resizing.height)):(f.width=n(a,d,c[0]),f.height=n(o,u,c[1])),s&&s.dragging?(f.top=Math.round(s.dragging.top),f.left=Math.round(s.dragging.left)):s&&s.resizing&&typeof s.resizing.top==`number`&&typeof s.resizing.left==`number`?(f.top=Math.round(s.resizing.top),f.left=Math.round(s.resizing.left)):(f.top=Math.round((u+c[1])*i+l[1]),f.left=Math.round((d+c[0])*r+l[0])),f}function i(e,n,r,i,a){let{margin:s,containerPadding:c,cols:l,rowHeight:u,maxRows:d}=e,f=t(e),p=Math.round((r-c[0])/(f+s[0])),m=Math.round((n-c[1])/(u+s[1]));return p=o(p,0,l-i),m=o(m,0,d-a),{x:p,y:m}}function a(e,n,r,i,a,s){let{margin:c,maxRows:l,cols:u,rowHeight:d}=e,f=t(e),p=Math.round((n+c[0])/(f+c[0])),m=Math.round((r+c[1])/(d+c[1])),h=o(p,0,u-i),g=o(m,0,l-a);return[`sw`,`w`,`nw`].indexOf(s)!==-1&&(h=o(p,0,u)),[`nw`,`n`,`ne`].indexOf(s)!==-1&&(g=o(m,0,l)),{w:h,h:g}}function o(e,t,n){return Math.max(Math.min(e,n),t)}})),Ne=n((e=>{Object.defineProperty(e,"__esModule",{value:!0}),e.dontSetMe=a,e.findInArray=t,e.int=i,e.isFunction=n,e.isNum=r;function t(e,t){for(let n=0,r=e.length;n<r;n++)if(t.apply(t,[e[n],n,e]))return e[n]}function n(e){return typeof e==`function`||Object.prototype.toString.call(e)===`[object Function]`}function r(e){return typeof e==`number`&&!isNaN(e)}function i(e){return parseInt(e,10)}function a(e,t,n){if(e[t])return Error(`Invalid prop ${t} passed to ${n} - do not set this, set it on the child.`)}})),Pe=n((e=>{Object.defineProperty(e,"__esModule",{value:!0}),e.browserPrefixToKey=r,e.browserPrefixToStyle=i,e.default=void 0,e.getPrefix=n;var t=[`Moz`,`Webkit`,`O`,`ms`];function n(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:`transform`;if(typeof window>`u`)return``;let n=window.document?.documentElement?.style;if(!n||e in n)return``;for(let i=0;i<t.length;i++)if(r(e,t[i])in n)return t[i];return``}function r(e,t){return t?`${t}${a(e)}`:e}function i(e,t){return t?`-${t.toLowerCase()}-${e}`:e}function a(e){let t=``,n=!0;for(let r=0;r<e.length;r++)n?(t+=e[r].toUpperCase(),n=!1):e[r]===`-`?n=!0:t+=e[r];return t}e.default=n()})),Fe=n((e=>{Object.defineProperty(e,"__esModule",{value:!0}),e.addClassName=S,e.addEvent=s,e.addUserSelectStyles=y,e.createCSSTransform=m,e.createSVGTransform=h,e.getTouch=_,e.getTouchIdentifier=v,e.getTranslation=g,e.innerHeight=d,e.innerWidth=f,e.matchesSelector=a,e.matchesSelectorAndParentsTo=o,e.offsetXYFromParent=p,e.outerHeight=l,e.outerWidth=u,e.removeClassName=C,e.removeEvent=c,e.scheduleRemoveUserSelectStyles=b;var t=Ne(),n=r(Pe());function r(e,t){if(typeof WeakMap==`function`)var n=new WeakMap,i=new WeakMap;return(r=function(e,t){if(!t&&e&&e.__esModule)return e;var r,a,o={__proto__:null,default:e};if(e===null||typeof e!=`object`&&typeof e!=`function`)return o;if(r=t?i:n){if(r.has(e))return r.get(e);r.set(e,o)}for(let t in e)t!=="default"&&{}.hasOwnProperty.call(e,t)&&((a=(r=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,t))&&(a.get||a.set)?r(o,t,a):o[t]=e[t]);return o})(e,t)}var i=``;function a(e,n){return i||=(0,t.findInArray)([`matches`,`webkitMatchesSelector`,`mozMatchesSelector`,`msMatchesSelector`,`oMatchesSelector`],function(n){return(0,t.isFunction)(e[n])}),(0,t.isFunction)(e[i])?e[i](n):!1}function o(e,t,n){let r=e;do{if(a(r,t))return!0;if(r===n)return!1;r=r.parentNode}while(r);return!1}function s(e,t,n,r){if(!e)return;let i={capture:!0,...r};e.addEventListener?e.addEventListener(t,n,i):e.attachEvent?e.attachEvent(`on`+t,n):e[`on`+t]=n}function c(e,t,n,r){if(!e)return;let i={capture:!0,...r};e.removeEventListener?e.removeEventListener(t,n,i):e.detachEvent?e.detachEvent(`on`+t,n):e[`on`+t]=null}function l(e){let n=e.clientHeight,r=e.ownerDocument.defaultView.getComputedStyle(e);return n+=(0,t.int)(r.borderTopWidth),n+=(0,t.int)(r.borderBottomWidth),n}function u(e){let n=e.clientWidth,r=e.ownerDocument.defaultView.getComputedStyle(e);return n+=(0,t.int)(r.borderLeftWidth),n+=(0,t.int)(r.borderRightWidth),n}function d(e){let n=e.clientHeight,r=e.ownerDocument.defaultView.getComputedStyle(e);return n-=(0,t.int)(r.paddingTop),n-=(0,t.int)(r.paddingBottom),n}function f(e){let n=e.clientWidth,r=e.ownerDocument.defaultView.getComputedStyle(e);return n-=(0,t.int)(r.paddingLeft),n-=(0,t.int)(r.paddingRight),n}function p(e,t,n){let r=t===t.ownerDocument.body?{left:0,top:0}:t.getBoundingClientRect();return{x:(e.clientX+t.scrollLeft-r.left)/n,y:(e.clientY+t.scrollTop-r.top)/n}}function m(e,t){let r=g(e,t,`px`);return{[(0,n.browserPrefixToKey)(`transform`,n.default)]:r}}function h(e,t){return g(e,t,``)}function g(e,t,n){let{x:r,y:i}=e,a=`translate(${r}${n},${i}${n})`;return t&&(a=`translate(${`${typeof t.x==`string`?t.x:t.x+n}`}, ${`${typeof t.y==`string`?t.y:t.y+n}`})`+a),a}function _(e,n){return e.targetTouches&&(0,t.findInArray)(e.targetTouches,e=>n===e.identifier)||e.changedTouches&&(0,t.findInArray)(e.changedTouches,e=>n===e.identifier)}function v(e){if(e.targetTouches&&e.targetTouches[0])return e.targetTouches[0].identifier;if(e.changedTouches&&e.changedTouches[0])return e.changedTouches[0].identifier}function y(e){if(!e)return;let t=e.getElementById(`react-draggable-style-el`);t||(t=e.createElement(`style`),t.type=`text/css`,t.id=`react-draggable-style-el`,t.innerHTML=`.react-draggable-transparent-selection *::-moz-selection {all: inherit;}
|
|
2
|
+
`,t.innerHTML+=`.react-draggable-transparent-selection *::selection {all: inherit;}
|
|
3
|
+
`,e.getElementsByTagName(`head`)[0].appendChild(t)),e.body&&S(e.body,`react-draggable-transparent-selection`)}function b(e){window.requestAnimationFrame?window.requestAnimationFrame(()=>{x(e)}):x(e)}function x(e){if(e)try{if(e.body&&C(e.body,`react-draggable-transparent-selection`),e.selection)e.selection.empty();else{let t=(e.defaultView||window).getSelection();t&&t.type!==`Caret`&&t.removeAllRanges()}}catch{}}function S(e,t){e.classList?e.classList.add(t):e.className.match(RegExp(`(?:^|\\s)${t}(?!\\S)`))||(e.className+=` ${t}`)}function C(e,t){e.classList?e.classList.remove(t):e.className=e.className.replace(RegExp(`(?:^|\\s)${t}(?!\\S)`,`g`),``)}})),Ie=n((e=>{Object.defineProperty(e,"__esModule",{value:!0}),e.canDragX=a,e.canDragY=o,e.createCoreData=c,e.createDraggableData=l,e.getBoundPosition=r,e.getControlPosition=s,e.snapToGrid=i;var t=Ne(),n=Fe();function r(e,r,i){if(!e.props.bounds)return[r,i];let{bounds:a}=e.props;a=typeof a==`string`?a:u(a);let o=d(e);if(typeof a==`string`){let{ownerDocument:e}=o,r=e.defaultView,i;if(i=a===`parent`?o.parentNode:o.getRootNode().querySelector(a),!(i instanceof r.HTMLElement))throw Error(`Bounds selector "`+a+`" could not find an element.`);let s=i,c=r.getComputedStyle(o),l=r.getComputedStyle(s);a={left:-o.offsetLeft+(0,t.int)(l.paddingLeft)+(0,t.int)(c.marginLeft),top:-o.offsetTop+(0,t.int)(l.paddingTop)+(0,t.int)(c.marginTop),right:(0,n.innerWidth)(s)-(0,n.outerWidth)(o)-o.offsetLeft+(0,t.int)(l.paddingRight)-(0,t.int)(c.marginRight),bottom:(0,n.innerHeight)(s)-(0,n.outerHeight)(o)-o.offsetTop+(0,t.int)(l.paddingBottom)-(0,t.int)(c.marginBottom)}}return(0,t.isNum)(a.right)&&(r=Math.min(r,a.right)),(0,t.isNum)(a.bottom)&&(i=Math.min(i,a.bottom)),(0,t.isNum)(a.left)&&(r=Math.max(r,a.left)),(0,t.isNum)(a.top)&&(i=Math.max(i,a.top)),[r,i]}function i(e,t,n){return[Math.round(t/e[0])*e[0],Math.round(n/e[1])*e[1]]}function a(e){return e.props.axis===`both`||e.props.axis===`x`}function o(e){return e.props.axis===`both`||e.props.axis===`y`}function s(e,t,r){let i=typeof t==`number`?(0,n.getTouch)(e,t):null;if(typeof t==`number`&&!i)return null;let a=d(r),o=r.props.offsetParent||a.offsetParent||a.ownerDocument.body;return(0,n.offsetXYFromParent)(i||e,o,r.props.scale)}function c(e,n,r){let i=!(0,t.isNum)(e.lastX),a=d(e);return i?{node:a,deltaX:0,deltaY:0,lastX:n,lastY:r,x:n,y:r}:{node:a,deltaX:n-e.lastX,deltaY:r-e.lastY,lastX:e.lastX,lastY:e.lastY,x:n,y:r}}function l(e,t){let n=e.props.scale;return{node:t.node,x:e.state.x+t.deltaX/n,y:e.state.y+t.deltaY/n,deltaX:t.deltaX/n,deltaY:t.deltaY/n,lastX:e.state.x,lastY:e.state.y}}function u(e){return{left:e.left,top:e.top,right:e.right,bottom:e.bottom}}function d(e){let t=e.findDOMNode();if(!t)throw Error(`<DraggableCore>: Unmounted during event!`);return t}})),Le=n((e=>{Object.defineProperty(e,"__esModule",{value:!0}),e.default=t;function t(){}})),Re=n((e=>{Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=f(a()),n=d(c()),r=d(o()),i=Fe(),s=Ie(),l=Ne(),u=d(Le());function d(e){return e&&e.__esModule?e:{default:e}}function f(e,t){if(typeof WeakMap==`function`)var n=new WeakMap,r=new WeakMap;return(f=function(e,t){if(!t&&e&&e.__esModule)return e;var i,a,o={__proto__:null,default:e};if(e===null||typeof e!=`object`&&typeof e!=`function`)return o;if(i=t?r:n){if(i.has(e))return i.get(e);i.set(e,o)}for(let t in e)t!=="default"&&{}.hasOwnProperty.call(e,t)&&((a=(i=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,t))&&(a.get||a.set)?i(o,t,a):o[t]=e[t]);return o})(e,t)}function p(e,t,n){return(t=m(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function m(e){var t=h(e,`string`);return typeof t==`symbol`?t:t+``}function h(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}var g={touch:{start:`touchstart`,move:`touchmove`,stop:`touchend`},mouse:{start:`mousedown`,move:`mousemove`,stop:`mouseup`}},_=g.mouse,v=class extends t.Component{constructor(){super(...arguments),p(this,`dragging`,!1),p(this,`lastX`,NaN),p(this,`lastY`,NaN),p(this,`touchIdentifier`,null),p(this,`mounted`,!1),p(this,`handleDragStart`,e=>{if(this.props.onMouseDown(e),!this.props.allowAnyClick&&typeof e.button==`number`&&e.button!==0)return!1;let t=this.findDOMNode();if(!t||!t.ownerDocument||!t.ownerDocument.body)throw Error(`<DraggableCore> not mounted on DragStart!`);let{ownerDocument:n}=t;if(this.props.disabled||!(e.target instanceof n.defaultView.Node)||this.props.handle&&!(0,i.matchesSelectorAndParentsTo)(e.target,this.props.handle,t)||this.props.cancel&&(0,i.matchesSelectorAndParentsTo)(e.target,this.props.cancel,t))return;e.type===`touchstart`&&!this.props.allowMobileScroll&&e.preventDefault();let r=(0,i.getTouchIdentifier)(e);this.touchIdentifier=r;let a=(0,s.getControlPosition)(e,r,this);if(a==null)return;let{x:o,y:c}=a,l=(0,s.createCoreData)(this,o,c);(0,u.default)(`DraggableCore: handleDragStart: %j`,l),(0,u.default)(`calling`,this.props.onStart),!(this.props.onStart(e,l)===!1||this.mounted===!1)&&(this.props.enableUserSelectHack&&(0,i.addUserSelectStyles)(n),this.dragging=!0,this.lastX=o,this.lastY=c,(0,i.addEvent)(n,_.move,this.handleDrag),(0,i.addEvent)(n,_.stop,this.handleDragStop))}),p(this,`handleDrag`,e=>{let t=(0,s.getControlPosition)(e,this.touchIdentifier,this);if(t==null)return;let{x:n,y:r}=t;if(Array.isArray(this.props.grid)){let e=n-this.lastX,t=r-this.lastY;if([e,t]=(0,s.snapToGrid)(this.props.grid,e,t),!e&&!t)return;n=this.lastX+e,r=this.lastY+t}let i=(0,s.createCoreData)(this,n,r);if((0,u.default)(`DraggableCore: handleDrag: %j`,i),this.props.onDrag(e,i)===!1||this.mounted===!1){try{this.handleDragStop(new MouseEvent(`mouseup`))}catch{let e=document.createEvent(`MouseEvents`);e.initMouseEvent(`mouseup`,!0,!0,window,0,0,0,0,0,!1,!1,!1,!1,0,null),this.handleDragStop(e)}return}this.lastX=n,this.lastY=r}),p(this,`handleDragStop`,e=>{if(!this.dragging)return;let t=(0,s.getControlPosition)(e,this.touchIdentifier,this);if(t==null)return;let{x:n,y:r}=t;if(Array.isArray(this.props.grid)){let e=n-this.lastX||0,t=r-this.lastY||0;[e,t]=(0,s.snapToGrid)(this.props.grid,e,t),n=this.lastX+e,r=this.lastY+t}let a=(0,s.createCoreData)(this,n,r);if(this.props.onStop(e,a)===!1||this.mounted===!1)return!1;let o=this.findDOMNode();o&&this.props.enableUserSelectHack&&(0,i.scheduleRemoveUserSelectStyles)(o.ownerDocument),(0,u.default)(`DraggableCore: handleDragStop: %j`,a),this.dragging=!1,this.lastX=NaN,this.lastY=NaN,o&&((0,u.default)(`DraggableCore: Removing handlers`),(0,i.removeEvent)(o.ownerDocument,_.move,this.handleDrag),(0,i.removeEvent)(o.ownerDocument,_.stop,this.handleDragStop))}),p(this,`onMouseDown`,e=>(_=g.mouse,this.handleDragStart(e))),p(this,`onMouseUp`,e=>(_=g.mouse,this.handleDragStop(e))),p(this,`onTouchStart`,e=>(_=g.touch,this.handleDragStart(e))),p(this,`onTouchEnd`,e=>(_=g.touch,this.handleDragStop(e)))}componentDidMount(){this.mounted=!0;let e=this.findDOMNode();e&&(0,i.addEvent)(e,g.touch.start,this.onTouchStart,{passive:!1})}componentWillUnmount(){this.mounted=!1;let e=this.findDOMNode();if(e){let{ownerDocument:t}=e;(0,i.removeEvent)(t,g.mouse.move,this.handleDrag),(0,i.removeEvent)(t,g.touch.move,this.handleDrag),(0,i.removeEvent)(t,g.mouse.stop,this.handleDragStop),(0,i.removeEvent)(t,g.touch.stop,this.handleDragStop),(0,i.removeEvent)(e,g.touch.start,this.onTouchStart,{passive:!1}),this.props.enableUserSelectHack&&(0,i.scheduleRemoveUserSelectStyles)(t)}}findDOMNode(){return this.props?.nodeRef?this.props?.nodeRef?.current:r.default.findDOMNode(this)}render(){return t.cloneElement(t.Children.only(this.props.children),{onMouseDown:this.onMouseDown,onMouseUp:this.onMouseUp,onTouchEnd:this.onTouchEnd})}};e.default=v,p(v,`displayName`,`DraggableCore`),p(v,`propTypes`,{allowAnyClick:n.default.bool,allowMobileScroll:n.default.bool,children:n.default.node.isRequired,disabled:n.default.bool,enableUserSelectHack:n.default.bool,offsetParent:function(e,t){if(e[t]&&e[t].nodeType!==1)throw Error(`Draggable's offsetParent must be a DOM Node.`)},grid:n.default.arrayOf(n.default.number),handle:n.default.string,cancel:n.default.string,nodeRef:n.default.object,onStart:n.default.func,onDrag:n.default.func,onStop:n.default.func,onMouseDown:n.default.func,scale:n.default.number,className:l.dontSetMe,style:l.dontSetMe,transform:l.dontSetMe}),p(v,`defaultProps`,{allowAnyClick:!1,allowMobileScroll:!1,disabled:!1,enableUserSelectHack:!0,onStart:function(){},onDrag:function(){},onStop:function(){},onMouseDown:function(){},scale:1})})),ze=n((e=>{Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"DraggableCore",{enumerable:!0,get:function(){return d.default}}),e.default=void 0;var t=m(a()),n=p(c()),r=p(o()),i=X(),s=Fe(),l=Ie(),u=Ne(),d=p(Re()),f=p(Le());function p(e){return e&&e.__esModule?e:{default:e}}function m(e,t){if(typeof WeakMap==`function`)var n=new WeakMap,r=new WeakMap;return(m=function(e,t){if(!t&&e&&e.__esModule)return e;var i,a,o={__proto__:null,default:e};if(e===null||typeof e!=`object`&&typeof e!=`function`)return o;if(i=t?r:n){if(i.has(e))return i.get(e);i.set(e,o)}for(let t in e)t!=="default"&&{}.hasOwnProperty.call(e,t)&&((a=(i=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,t))&&(a.get||a.set)?i(o,t,a):o[t]=e[t]);return o})(e,t)}function h(){return h=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},h.apply(null,arguments)}function g(e,t,n){return(t=_(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function _(e){var t=v(e,`string`);return typeof t==`symbol`?t:t+``}function v(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}var y=class extends t.Component{static getDerivedStateFromProps(e,t){let{position:n}=e,{prevPropsPosition:r}=t;return n&&(!r||n.x!==r.x||n.y!==r.y)?((0,f.default)(`Draggable: getDerivedStateFromProps %j`,{position:n,prevPropsPosition:r}),{x:n.x,y:n.y,prevPropsPosition:{...n}}):null}constructor(e){super(e),g(this,`onDragStart`,(e,t)=>{if((0,f.default)(`Draggable: onDragStart: %j`,t),this.props.onStart(e,(0,l.createDraggableData)(this,t))===!1)return!1;this.setState({dragging:!0,dragged:!0})}),g(this,`onDrag`,(e,t)=>{if(!this.state.dragging)return!1;(0,f.default)(`Draggable: onDrag: %j`,t);let n=(0,l.createDraggableData)(this,t),r={x:n.x,y:n.y,slackX:0,slackY:0};if(this.props.bounds){let{x:e,y:t}=r;r.x+=this.state.slackX,r.y+=this.state.slackY;let[i,a]=(0,l.getBoundPosition)(this,r.x,r.y);r.x=i,r.y=a,r.slackX=this.state.slackX+(e-r.x),r.slackY=this.state.slackY+(t-r.y),n.x=r.x,n.y=r.y,n.deltaX=r.x-this.state.x,n.deltaY=r.y-this.state.y}if(this.props.onDrag(e,n)===!1)return!1;this.setState(r)}),g(this,`onDragStop`,(e,t)=>{if(!this.state.dragging||this.props.onStop(e,(0,l.createDraggableData)(this,t))===!1)return!1;(0,f.default)(`Draggable: onDragStop: %j`,t);let n={dragging:!1,slackX:0,slackY:0};if(this.props.position){let{x:e,y:t}=this.props.position;n.x=e,n.y=t}this.setState(n)}),this.state={dragging:!1,dragged:!1,x:e.position?e.position.x:e.defaultPosition.x,y:e.position?e.position.y:e.defaultPosition.y,prevPropsPosition:{...e.position},slackX:0,slackY:0,isElementSVG:!1},e.position&&!(e.onDrag||e.onStop)&&console.warn("A `position` was applied to this <Draggable>, without drag handlers. This will make this component effectively undraggable. Please attach `onDrag` or `onStop` handlers so you can adjust the `position` of this element.")}componentDidMount(){window.SVGElement!==void 0&&this.findDOMNode()instanceof window.SVGElement&&this.setState({isElementSVG:!0})}componentWillUnmount(){this.state.dragging&&this.setState({dragging:!1})}findDOMNode(){return this.props?.nodeRef?.current??r.default.findDOMNode(this)}render(){let{axis:e,bounds:n,children:r,defaultPosition:a,defaultClassName:o,defaultClassNameDragging:c,defaultClassNameDragged:u,position:f,positionOffset:p,scale:m,...g}=this.props,_={},v=null,y=!f||this.state.dragging,b=f||a,x={x:(0,l.canDragX)(this)&&y?this.state.x:b.x,y:(0,l.canDragY)(this)&&y?this.state.y:b.y};this.state.isElementSVG?v=(0,s.createSVGTransform)(x,p):_=(0,s.createCSSTransform)(x,p);let S=(0,i.clsx)(r.props.className||``,o,{[c]:this.state.dragging,[u]:this.state.dragged});return t.createElement(d.default,h({},g,{onStart:this.onDragStart,onDrag:this.onDrag,onStop:this.onDragStop}),t.cloneElement(t.Children.only(r),{className:S,style:{...r.props.style,..._},transform:v}))}};e.default=y,g(y,`displayName`,`Draggable`),g(y,`propTypes`,{...d.default.propTypes,axis:n.default.oneOf([`both`,`x`,`y`,`none`]),bounds:n.default.oneOfType([n.default.shape({left:n.default.number,right:n.default.number,top:n.default.number,bottom:n.default.number}),n.default.string,n.default.oneOf([!1])]),defaultClassName:n.default.string,defaultClassNameDragging:n.default.string,defaultClassNameDragged:n.default.string,defaultPosition:n.default.shape({x:n.default.number,y:n.default.number}),positionOffset:n.default.shape({x:n.default.oneOfType([n.default.number,n.default.string]),y:n.default.oneOfType([n.default.number,n.default.string])}),position:n.default.shape({x:n.default.number,y:n.default.number}),className:u.dontSetMe,style:u.dontSetMe,transform:u.dontSetMe}),g(y,`defaultProps`,{...d.default.defaultProps,axis:`both`,bounds:!1,defaultClassName:`react-draggable`,defaultClassNameDragging:`react-draggable-dragging`,defaultClassNameDragged:`react-draggable-dragged`,defaultPosition:{x:0,y:0},scale:1})})),Be=n(((e,t)=>{var{default:n,DraggableCore:r}=ze();t.exports=n,t.exports.default=n,t.exports.DraggableCore=r})),Ve=n(((e,t)=>{var n=Object.create,r=Object.defineProperty,i=Object.getOwnPropertyDescriptor,s=Object.getOwnPropertyNames,l=Object.getPrototypeOf,u=Object.prototype.hasOwnProperty,d=(e,t)=>{for(var n in t)r(e,n,{get:t[n],enumerable:!0})},f=(e,t,n,a)=>{if(t&&typeof t==`object`||typeof t==`function`)for(let o of s(t))!u.call(e,o)&&o!==n&&r(e,o,{get:()=>t[o],enumerable:!(a=i(t,o))||a.enumerable});return e},p=(e,t,i)=>(i=e==null?{}:n(l(e)),f(t||!e||!e.__esModule?r(i,`default`,{value:e,enumerable:!0}):i,e)),m=e=>f(r({},`__esModule`,{value:!0}),e),h={};d(h,{DraggableCore:()=>J,default:()=>Y}),t.exports=m(h);var g=p(a()),_=p(c()),v=p(o()),y=X();function b(e,t){for(let n=0,r=e.length;n<r;n++)if(t.apply(t,[e[n],n,e]))return e[n]}function x(e){return typeof e==`function`||Object.prototype.toString.call(e)===`[object Function]`}function S(e){return typeof e==`number`&&!isNaN(e)}function C(e){return parseInt(e,10)}function w(e,t,n){if(e[t])return Error(`Invalid prop ${t} passed to ${n} - do not set this, set it on the child.`)}var T=[`Moz`,`Webkit`,`O`,`ms`];function E(e=`transform`){if(typeof window>`u`)return``;let t=window.document?.documentElement?.style;if(!t||e in t)return``;for(let n=0;n<T.length;n++)if(D(e,T[n])in t)return T[n];return``}function D(e,t){return t?`${t}${O(e)}`:e}function O(e){let t=``,n=!0;for(let r=0;r<e.length;r++)n?(t+=e[r].toUpperCase(),n=!1):e[r]===`-`?n=!0:t+=e[r];return t}var ee=E(),k=``;function A(e,t){k||=b([`matches`,`webkitMatchesSelector`,`mozMatchesSelector`,`msMatchesSelector`,`oMatchesSelector`],function(t){return x(e[t])})??``;let n=e[k];return x(n)?!!n.call(e,t):!1}function j(e,t,n){let r=e;do{if(A(r,t))return!0;if(r===n)return!1;r=r.parentNode}while(r);return!1}function M(e,t,n,r){if(!e)return;let i={capture:!0,...r},a=n;e.addEventListener?e.addEventListener(t,a,i):e.attachEvent?e.attachEvent(`on`+t,a):e[`on`+t]=a}function N(e,t,n,r){if(!e)return;let i={capture:!0,...r},a=n;e.removeEventListener?e.removeEventListener(t,a,i):e.detachEvent?e.detachEvent(`on`+t,a):e[`on`+t]=null}function P(e){let t=e.clientHeight,n=e.ownerDocument.defaultView.getComputedStyle(e);return t+=C(n.borderTopWidth),t+=C(n.borderBottomWidth),t}function F(e){let t=e.clientWidth,n=e.ownerDocument.defaultView.getComputedStyle(e);return t+=C(n.borderLeftWidth),t+=C(n.borderRightWidth),t}function I(e){let t=e.clientHeight,n=e.ownerDocument.defaultView.getComputedStyle(e);return t-=C(n.paddingTop),t-=C(n.paddingBottom),t}function te(e){let t=e.clientWidth,n=e.ownerDocument.defaultView.getComputedStyle(e);return t-=C(n.paddingLeft),t-=C(n.paddingRight),t}function ne(e,t,n){let r=t===t.ownerDocument.body?{left:0,top:0}:t.getBoundingClientRect();return{x:(e.clientX+t.scrollLeft-r.left)/n,y:(e.clientY+t.scrollTop-r.top)/n}}function L(e,t){let n=R(e,t,`px`);return{[D(`transform`,ee)]:n}}function re(e,t){return R(e,t,``)}function R({x:e,y:t},n,r){let i=`translate(${e}${r},${t}${r})`;return n&&(i=`translate(${`${typeof n.x==`string`?n.x:n.x+r}`}, ${`${typeof n.y==`string`?n.y:n.y+r}`})`+i),i}function z(e,t){return e.targetTouches&&b(e.targetTouches,e=>t===e.identifier)||e.changedTouches&&b(e.changedTouches,e=>t===e.identifier)}function B(e){if(e.targetTouches&&e.targetTouches[0])return e.targetTouches[0].identifier;if(e.changedTouches&&e.changedTouches[0])return e.changedTouches[0].identifier}function ie(e){if(!e)return;let t=e.getElementById(`react-draggable-style-el`);t||(t=e.createElement(`style`),t.type=`text/css`,t.id=`react-draggable-style-el`,t.innerHTML=`.react-draggable-transparent-selection *::-moz-selection {all: inherit;}
|
|
4
|
+
`,t.innerHTML+=`.react-draggable-transparent-selection *::selection {all: inherit;}
|
|
5
|
+
`,e.getElementsByTagName(`head`)[0].appendChild(t)),e.body&&oe(e.body,`react-draggable-transparent-selection`)}function V(e){window.requestAnimationFrame?window.requestAnimationFrame(()=>{ae(e)}):ae(e)}function ae(e){if(e)try{e.body&&se(e.body,`react-draggable-transparent-selection`);let t=e.selection;if(t)t.empty();else{let t=(e.defaultView||window).getSelection();t&&t.type!==`Caret`&&t.removeAllRanges()}}catch{}}function oe(e,t){e.classList?e.classList.add(t):e.className.match(RegExp(`(?:^|\\s)${t}(?!\\S)`))||(e.className+=` ${t}`)}function se(e,t){e.classList?e.classList.remove(t):e.className=e.className.replace(RegExp(`(?:^|\\s)${t}(?!\\S)`,`g`),``)}function ce(e,t,n){if(!e.props.bounds)return[t,n];let{bounds:r}=e.props;r=typeof r==`string`?r:he(r);let i=H(e);if(typeof r==`string`){let{ownerDocument:e}=i,t=e.defaultView;if(!t)throw Error(`Cannot resolve the owner window of the draggable node.`);let n;if(n=r===`parent`?i.parentNode:i.getRootNode().querySelector(r),!(n instanceof t.HTMLElement))throw Error(`Bounds selector "`+r+`" could not find an element.`);let a=n,o=t.getComputedStyle(i),s=t.getComputedStyle(a);r={left:-i.offsetLeft+C(s.paddingLeft)+C(o.marginLeft),top:-i.offsetTop+C(s.paddingTop)+C(o.marginTop),right:te(a)-F(i)-i.offsetLeft+C(s.paddingRight)-C(o.marginRight),bottom:I(a)-P(i)-i.offsetTop+C(s.paddingBottom)-C(o.marginBottom)}}return S(r.right)&&(t=Math.min(t,r.right)),S(r.bottom)&&(n=Math.min(n,r.bottom)),S(r.left)&&(t=Math.max(t,r.left)),S(r.top)&&(n=Math.max(n,r.top)),[t,n]}function le(e,t,n){return[Math.round(t/e[0])*e[0],Math.round(n/e[1])*e[1]]}function ue(e){return e.props.axis===`both`||e.props.axis===`x`}function de(e){return e.props.axis===`both`||e.props.axis===`y`}function fe(e,t,n){let r=typeof t==`number`?z(e,t):null;if(typeof t==`number`&&!r)return null;let i=H(n),a=n.props.offsetParent||i.offsetParent||i.ownerDocument.body;return ne(r||e,a,n.props.scale)}function pe(e,t,n){let r=!S(e.lastX),i=H(e);return r?{node:i,deltaX:0,deltaY:0,lastX:t,lastY:n,x:t,y:n}:{node:i,deltaX:t-e.lastX,deltaY:n-e.lastY,lastX:e.lastX,lastY:e.lastY,x:t,y:n}}function me(e,t){let n=e.props.scale;return{node:t.node,x:e.state.x+t.deltaX/n,y:e.state.y+t.deltaY/n,deltaX:t.deltaX/n,deltaY:t.deltaY/n,lastX:e.state.x,lastY:e.state.y}}function he(e){return{left:e.left,top:e.top,right:e.right,bottom:e.bottom}}function H(e){let t=e.findDOMNode();if(!t)throw Error(`<DraggableCore>: Unmounted during event!`);return t}var U=p(a()),W=p(c()),ge=p(o());function G(...e){({}).DRAGGABLE_DEBUG&&console.log(...e)}var K={touch:{start:`touchstart`,move:`touchmove`,stop:`touchend`},mouse:{start:`mousedown`,move:`mousemove`,stop:`mouseup`}},q=K.mouse,J=class extends U.Component{constructor(){super(...arguments),this.dragging=!1,this.lastX=NaN,this.lastY=NaN,this.touchIdentifier=null,this.mounted=!1,this.handleDragStart=e=>{if(this.props.onMouseDown(e),!this.props.allowAnyClick&&(typeof e.button==`number`&&e.button!==0||e.ctrlKey))return!1;let t=this.findDOMNode();if(!t||!t.ownerDocument||!t.ownerDocument.body)throw Error(`<DraggableCore> not mounted on DragStart!`);let{ownerDocument:n}=t;if(this.props.disabled||!(e.target instanceof n.defaultView.Node)||this.props.handle&&!j(e.target,this.props.handle,t)||this.props.cancel&&j(e.target,this.props.cancel,t))return;e.type===`touchstart`&&!this.props.allowMobileScroll&&e.preventDefault();let r=B(e);this.touchIdentifier=r;let i=fe(e,r,this);if(i==null)return;let{x:a,y:o}=i,s=pe(this,a,o);G(`DraggableCore: handleDragStart: %j`,s),G(`calling`,this.props.onStart),!(this.props.onStart(e,s)===!1||this.mounted===!1)&&(this.props.enableUserSelectHack&&ie(n),this.dragging=!0,this.lastX=a,this.lastY=o,M(n,q.move,this.handleDrag),M(n,q.stop,this.handleDragStop))},this.handleDrag=e=>{let t=fe(e,this.touchIdentifier,this);if(t==null)return;let{x:n,y:r}=t;if(Array.isArray(this.props.grid)){let e=n-this.lastX,t=r-this.lastY;if([e,t]=le(this.props.grid,e,t),!e&&!t)return;n=this.lastX+e,r=this.lastY+t}let i=pe(this,n,r);if(G(`DraggableCore: handleDrag: %j`,i),this.props.onDrag(e,i)===!1||this.mounted===!1){try{this.handleDragStop(new MouseEvent(`mouseup`))}catch{let e=document.createEvent(`MouseEvents`);e.initMouseEvent(`mouseup`,!0,!0,window,0,0,0,0,0,!1,!1,!1,!1,0,null),this.handleDragStop(e)}return}this.lastX=n,this.lastY=r},this.handleDragStop=e=>{if(!this.dragging)return;let t=fe(e,this.touchIdentifier,this);if(t==null)return;let{x:n,y:r}=t;if(Array.isArray(this.props.grid)){let e=n-this.lastX||0,t=r-this.lastY||0;[e,t]=le(this.props.grid,e,t),n=this.lastX+e,r=this.lastY+t}let i=pe(this,n,r);if(this.props.onStop(e,i)===!1||this.mounted===!1)return!1;let a=this.findDOMNode();a&&this.props.enableUserSelectHack&&V(a.ownerDocument),G(`DraggableCore: handleDragStop: %j`,i),this.dragging=!1,this.lastX=NaN,this.lastY=NaN,a&&(G(`DraggableCore: Removing handlers`),N(a.ownerDocument,q.move,this.handleDrag),N(a.ownerDocument,q.stop,this.handleDragStop))},this.onMouseDown=e=>(q=K.mouse,this.handleDragStart(e)),this.onMouseUp=e=>(q=K.mouse,this.handleDragStop(e)),this.onTouchStart=e=>(q=K.touch,this.handleDragStart(e)),this.onTouchEnd=e=>(q=K.touch,this.handleDragStop(e))}componentDidMount(){this.mounted=!0;let e=this.findDOMNode();e&&M(e,K.touch.start,this.onTouchStart,{passive:!1})}componentWillUnmount(){this.mounted=!1;let e=this.findDOMNode();if(e){let{ownerDocument:t}=e;N(t,K.mouse.move,this.handleDrag),N(t,K.touch.move,this.handleDrag),N(t,K.mouse.stop,this.handleDragStop),N(t,K.touch.stop,this.handleDragStop),N(e,K.touch.start,this.onTouchStart,{passive:!1}),this.props.enableUserSelectHack&&V(t)}}findDOMNode(){if(this.props?.nodeRef)return this.props.nodeRef.current;let e=ge.default;return typeof e.findDOMNode==`function`?e.findDOMNode(this):(G(`react-draggable: ReactDOM.findDOMNode is not available in React 19+. You must provide a nodeRef prop. See: https://github.com/react-grid-layout/react-draggable#noderef`),null)}render(){return U.cloneElement(U.Children.only(this.props.children),{onMouseDown:this.onMouseDown,onMouseUp:this.onMouseUp,onTouchEnd:this.onTouchEnd})}};J.displayName=`DraggableCore`,J.propTypes={allowAnyClick:W.default.bool,allowMobileScroll:W.default.bool,children:W.default.node.isRequired,disabled:W.default.bool,enableUserSelectHack:W.default.bool,offsetParent:function(e,t){if(e[t]&&e[t].nodeType!==1)throw Error(`Draggable's offsetParent must be a DOM Node.`)},grid:W.default.arrayOf(W.default.number),handle:W.default.string,cancel:W.default.string,nodeRef:W.default.object,onStart:W.default.func,onDrag:W.default.func,onStop:W.default.func,onMouseDown:W.default.func,scale:W.default.number,className:w,style:w,transform:w},J.defaultProps={allowAnyClick:!1,allowMobileScroll:!1,disabled:!1,enableUserSelectHack:!0,onStart:function(){},onDrag:function(){},onStop:function(){},onMouseDown:function(){},scale:1};var Y=class extends g.Component{constructor(e){super(e),this.onDragStart=(e,t)=>{if(G(`Draggable: onDragStart: %j`,t),this.props.onStart(e,me(this,t))===!1)return!1;this.setState({dragging:!0,dragged:!0})},this.onDrag=(e,t)=>{if(!this.state.dragging)return!1;G(`Draggable: onDrag: %j`,t);let n=me(this,t),r={x:n.x,y:n.y,slackX:0,slackY:0};if(this.props.bounds){let{x:e,y:t}=r;r.x+=this.state.slackX,r.y+=this.state.slackY;let[i,a]=ce(this,r.x,r.y);r.x=i,r.y=a,r.slackX=this.state.slackX+(e-r.x),r.slackY=this.state.slackY+(t-r.y),n.x=r.x,n.y=r.y,n.deltaX=r.x-this.state.x,n.deltaY=r.y-this.state.y}if(this.props.onDrag(e,n)===!1)return!1;this.setState(r)},this.onDragStop=(e,t)=>{if(!this.state.dragging||this.props.onStop(e,me(this,t))===!1)return!1;G(`Draggable: onDragStop: %j`,t);let n={dragging:!1,slackX:0,slackY:0};if(this.props.position){let{x:e,y:t}=this.props.position;n.x=e,n.y=t}this.setState(n)},this.state={dragging:!1,dragged:!1,x:e.position?e.position.x:e.defaultPosition.x,y:e.position?e.position.y:e.defaultPosition.y,prevPropsPosition:{...e.position},slackX:0,slackY:0,isElementSVG:!1},e.position&&!(e.onDrag||e.onStop)&&console.warn("A `position` was applied to this <Draggable>, without drag handlers. This will make this component effectively undraggable. Please attach `onDrag` or `onStop` handlers so you can adjust the `position` of this element.")}static getDerivedStateFromProps({position:e},{prevPropsPosition:t}){return e&&(!t||e.x!==t.x||e.y!==t.y)?(G(`Draggable: getDerivedStateFromProps %j`,{position:e,prevPropsPosition:t}),{x:e.x,y:e.y,prevPropsPosition:{...e}}):null}componentDidMount(){window.SVGElement!==void 0&&this.findDOMNode()instanceof window.SVGElement&&this.setState({isElementSVG:!0})}componentWillUnmount(){this.state.dragging&&this.setState({dragging:!1})}findDOMNode(){if(this.props?.nodeRef)return this.props.nodeRef.current;let e=v.default;return typeof e.findDOMNode==`function`?e.findDOMNode(this):null}render(){let{axis:e,bounds:t,children:n,defaultPosition:r,defaultClassName:i,defaultClassNameDragging:a,defaultClassNameDragged:o,position:s,positionOffset:c,scale:l,...u}=this.props,d={},f=null,p=!s||this.state.dragging,m=s||r,h={x:ue(this)&&p?this.state.x:m.x,y:de(this)&&p?this.state.y:m.y};this.state.isElementSVG?f=re(h,c):d=L(h,c);let _=g.Children.only(n),v=(0,y.clsx)(_.props.className||``,i,{[a]:this.state.dragging,[o]:this.state.dragged});return g.createElement(J,{...u,onStart:this.onDragStart,onDrag:this.onDrag,onStop:this.onDragStop},g.cloneElement(_,{className:v,style:{..._.props.style,...d},transform:f}))}};Y.displayName=`Draggable`,Y.propTypes={...J.propTypes,axis:_.default.oneOf([`both`,`x`,`y`,`none`]),bounds:_.default.oneOfType([_.default.shape({left:_.default.number,right:_.default.number,top:_.default.number,bottom:_.default.number}),_.default.string,_.default.oneOf([!1])]),defaultClassName:_.default.string,defaultClassNameDragging:_.default.string,defaultClassNameDragged:_.default.string,defaultPosition:_.default.shape({x:_.default.number,y:_.default.number}),positionOffset:_.default.shape({x:_.default.oneOfType([_.default.number,_.default.string]),y:_.default.oneOfType([_.default.number,_.default.string])}),position:_.default.shape({x:_.default.number,y:_.default.number}),className:w,style:w,transform:w},Y.defaultProps={...J.defaultProps,axis:`both`,bounds:!1,defaultClassName:`react-draggable`,defaultClassNameDragging:`react-draggable-dragging`,defaultClassNameDragged:`react-draggable-dragged`,defaultPosition:{x:0,y:0},scale:1},0&&(t.exports={DraggableCore:J})})),He=n(((e,t)=>{var n=Ve(),r=n.DraggableCore,i=n.default||n;t.exports=i,t.exports.default=i,t.exports.DraggableCore=r})),Ue=n((e=>{e.__esModule=!0,e.cloneElement=l;var t=n(a());function n(e){return e&&e.__esModule?e:{default:e}}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?r(Object(n),!0).forEach(function(t){o(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function o(e,t,n){return(t=s(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e){var t=c(e,`string`);return typeof t==`symbol`?t:t+``}function c(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function l(e,n){return n.style&&e.props.style&&(n.style=i(i({},e.props.style),n.style)),n.className&&e.props.className&&(n.className=e.props.className+` `+n.className),t.default.cloneElement(e,n)}})),We=n((e=>{e.__esModule=!0,e.resizableProps=void 0;var t=n(c());He();function n(e){return e&&e.__esModule?e:{default:e}}e.resizableProps={axis:t.default.oneOf([`both`,`x`,`y`,`none`]),className:t.default.string,children:t.default.element.isRequired,draggableOpts:t.default.shape({allowAnyClick:t.default.bool,cancel:t.default.string,children:t.default.node,disabled:t.default.bool,enableUserSelectHack:t.default.bool,offsetParent:typeof Element<`u`?t.default.instanceOf(Element):t.default.any,grid:t.default.arrayOf(t.default.number),handle:t.default.string,nodeRef:t.default.object,onStart:t.default.func,onDrag:t.default.func,onStop:t.default.func,onMouseDown:t.default.func,scale:t.default.number}),height:function(){var e=[...arguments];let n=e[0];return n.axis===`both`||n.axis===`y`?t.default.number.isRequired(...e):t.default.number(...e)},handle:t.default.oneOfType([t.default.node,t.default.func]),handleSize:t.default.arrayOf(t.default.number),lockAspectRatio:t.default.bool,maxConstraints:t.default.arrayOf(t.default.number),minConstraints:t.default.arrayOf(t.default.number),onResizeStop:t.default.func,onResizeStart:t.default.func,onResize:t.default.func,resizeHandles:t.default.arrayOf(t.default.oneOf([`s`,`w`,`e`,`n`,`sw`,`nw`,`se`,`ne`])),transformScale:t.default.number,width:function(){var e=[...arguments];let n=e[0];return n.axis===`both`||n.axis===`x`?t.default.number.isRequired(...e):t.default.number(...e)}}})),Ge=n((e=>{e.__esModule=!0,e.default=void 0;var t=s(a()),n=He(),r=Ue(),i=We(),o=[`children`,`className`,`draggableOpts`,`width`,`height`,`handle`,`handleSize`,`lockAspectRatio`,`axis`,`minConstraints`,`maxConstraints`,`onResize`,`onResizeStop`,`onResizeStart`,`resizeHandles`,`transformScale`];function s(e,t){if(typeof WeakMap==`function`)var n=new WeakMap,r=new WeakMap;return(s=function(e,t){if(!t&&e&&e.__esModule)return e;var i,a,o={__proto__:null,default:e};if(e===null||typeof e!=`object`&&typeof e!=`function`)return o;if(i=t?r:n){if(i.has(e))return i.get(e);i.set(e,o)}for(let t in e)t!=="default"&&{}.hasOwnProperty.call(e,t)&&((a=(i=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,t))&&(a.get||a.set)?i(o,t,a):o[t]=e[t]);return o})(e,t)}function c(){return c=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},c.apply(null,arguments)}function l(e,t){if(e==null)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(t.indexOf(r)!==-1)continue;n[r]=e[r]}return n}function u(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function d(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?u(Object(n),!0).forEach(function(t){f(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):u(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function f(e,t,n){return(t=p(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function p(e){var t=m(e,`string`);return typeof t==`symbol`?t:t+``}function m(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}var h=class extends t.Component{constructor(){super(...arguments),this.handleRefs={},this.lastHandleRect=null,this.slack=null,this.lastSize=null}componentWillUnmount(){this.resetData()}resetData(){this.lastHandleRect=this.slack=this.lastSize=null}runConstraints(e,t){let n=this.props,r=n.minConstraints,i=n.maxConstraints,a=n.lockAspectRatio;if(!r&&!i&&!a)return[e,t];if(a){let n=this.props.width/this.props.height,r=e-this.props.width,i=t-this.props.height;Math.abs(r)>Math.abs(i*n)?t=e/n:e=t*n}let o=e,s=t,c=this.slack||[0,0],l=c[0],u=c[1];return e+=l,t+=u,r&&(e=Math.max(r[0],e),t=Math.max(r[1],t)),i&&(e=Math.min(i[0],e),t=Math.min(i[1],t)),this.slack=[l+(o-e),u+(s-t)],[e,t]}resizeHandler(e,t){return(n,r)=>{let i=r.node,a=r.deltaX,o=r.deltaY;e===`onResizeStart`&&this.resetData();let s=(this.props.axis===`both`||this.props.axis===`x`)&&t!==`n`&&t!==`s`,c=(this.props.axis===`both`||this.props.axis===`y`)&&t!==`e`&&t!==`w`;if(!s&&!c)return;let l=t[0],u=t[t.length-1],d=i.getBoundingClientRect();if(this.lastHandleRect!=null){if(u===`w`){let e=d.left-this.lastHandleRect.left;a+=e}if(l===`n`){let e=d.top-this.lastHandleRect.top;o+=e}}this.lastHandleRect=d,u===`w`&&(a=-a),l===`n`&&(o=-o);let f=this.lastSize?.width??this.props.width,p=this.lastSize?.height??this.props.height,m=f+(s?a/this.props.transformScale:0),h=p+(c?o/this.props.transformScale:0);var g=this.runConstraints(m,h);if(m=g[0],h=g[1],e===`onResizeStop`&&this.lastSize){var _=this.lastSize;m=_.width,h=_.height}let v=m!==f||h!==p;e!==`onResizeStop`&&(this.lastSize={width:m,height:h});let y=typeof this.props[e]==`function`?this.props[e]:null;y&&!(e===`onResize`&&!v)&&(n.persist==null||n.persist(),y(n,{node:i,size:{width:m,height:h},handle:t})),e===`onResizeStop`&&this.resetData()}}renderResizeHandle(e,n){let r=this.props.handle;if(!r)return t.createElement(`span`,{className:`react-resizable-handle react-resizable-handle-`+e,ref:n});if(typeof r==`function`)return r(e,n);let i=typeof r.type==`string`,a=d({ref:n},i?{}:{handleAxis:e});return t.cloneElement(r,a)}render(){let e=this.props,i=e.children,a=e.className,s=e.draggableOpts;e.width,e.height,e.handle,e.handleSize,e.lockAspectRatio,e.axis,e.minConstraints,e.maxConstraints,e.onResize,e.onResizeStop,e.onResizeStart;let u=e.resizeHandles;e.transformScale;let f=l(e,o);return(0,r.cloneElement)(i,d(d({},f),{},{className:(a?a+` `:``)+`react-resizable`,children:[...t.Children.toArray(i.props.children),...u.map(e=>{let r=this.handleRefs[e]??(this.handleRefs[e]=t.createRef());return t.createElement(n.DraggableCore,c({},s,{nodeRef:r,key:`resizableHandle-`+e,onStop:this.resizeHandler(`onResizeStop`,e),onStart:this.resizeHandler(`onResizeStart`,e),onDrag:this.resizeHandler(`onResize`,e)}),this.renderResizeHandle(e,r))})]}))}};e.default=h,h.propTypes=i.resizableProps,h.defaultProps={axis:`both`,handleSize:[20,20],lockAspectRatio:!1,minConstraints:[20,20],maxConstraints:[1/0,1/0],resizeHandles:[`se`],transformScale:1}})),Ke=n((e=>{e.__esModule=!0,e.default=void 0;var t=l(a()),n=s(c()),r=s(Ge()),i=We(),o=[`handle`,`handleSize`,`onResize`,`onResizeStart`,`onResizeStop`,`draggableOpts`,`minConstraints`,`maxConstraints`,`lockAspectRatio`,`axis`,`width`,`height`,`resizeHandles`,`style`,`transformScale`];function s(e){return e&&e.__esModule?e:{default:e}}function l(e,t){if(typeof WeakMap==`function`)var n=new WeakMap,r=new WeakMap;return(l=function(e,t){if(!t&&e&&e.__esModule)return e;var i,a,o={__proto__:null,default:e};if(e===null||typeof e!=`object`&&typeof e!=`function`)return o;if(i=t?r:n){if(i.has(e))return i.get(e);i.set(e,o)}for(let t in e)t!=="default"&&{}.hasOwnProperty.call(e,t)&&((a=(i=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,t))&&(a.get||a.set)?i(o,t,a):o[t]=e[t]);return o})(e,t)}function u(){return u=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},u.apply(null,arguments)}function d(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function f(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?d(Object(n),!0).forEach(function(t){p(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):d(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function p(e,t,n){return(t=m(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function m(e){var t=h(e,`string`);return typeof t==`symbol`?t:t+``}function h(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function g(e,t){if(e==null)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(t.indexOf(r)!==-1)continue;n[r]=e[r]}return n}var _=class extends t.Component{constructor(){super(...arguments),this.state={width:this.props.width,height:this.props.height,propsWidth:this.props.width,propsHeight:this.props.height},this.onResize=(e,t)=>{let n=t.size;this.props.onResize?(e.persist==null||e.persist(),this.setState(n,()=>this.props.onResize&&this.props.onResize(e,t))):this.setState(n)}}static getDerivedStateFromProps(e,t){return t.propsWidth!==e.width||t.propsHeight!==e.height?{width:e.width,height:e.height,propsWidth:e.width,propsHeight:e.height}:null}render(){let e=this.props,n=e.handle,i=e.handleSize;e.onResize;let a=e.onResizeStart,s=e.onResizeStop,c=e.draggableOpts,l=e.minConstraints,d=e.maxConstraints,p=e.lockAspectRatio,m=e.axis;e.width,e.height;let h=e.resizeHandles,_=e.style,v=e.transformScale,y=g(e,o);return t.createElement(r.default,{axis:m,draggableOpts:c,handle:n,handleSize:i,height:this.state.height,lockAspectRatio:p,maxConstraints:d,minConstraints:l,onResizeStart:a,onResize:this.onResize,onResizeStop:s,resizeHandles:h,transformScale:v,width:this.state.width},t.createElement(`div`,u({},y,{style:f(f({},_),{},{width:this.state.width+`px`,height:this.state.height+`px`})})))}};e.default=_,_.propTypes=f(f({},i.resizableProps),{},{children:n.default.element})})),qe=n(((e,t)=>{t.exports=function(){throw Error(`Don't instantiate Resizable directly! Use require('react-resizable').Resizable`)},t.exports.Resizable=Ge().default,t.exports.ResizableBox=Ke().default})),Je=n((e=>{Object.defineProperty(e,"__esModule",{value:!0}),e.resizeHandleType=e.resizeHandleAxesType=e.default=void 0;var t=r(c()),n=r(a());function r(e){return e&&e.__esModule?e:{default:e}}var i=e.resizeHandleAxesType=t.default.arrayOf(t.default.oneOf([`s`,`w`,`e`,`n`,`sw`,`nw`,`se`,`ne`])),o=e.resizeHandleType=t.default.oneOfType([t.default.node,t.default.func]);e.default={className:t.default.string,style:t.default.object,width:t.default.number,autoSize:t.default.bool,cols:t.default.number,draggableCancel:t.default.string,draggableHandle:t.default.string,verticalCompact:function(e){e.verticalCompact},compactType:t.default.oneOf([`vertical`,`horizontal`]),layout:function(e){var t=e.layout;t!==void 0&&Z().validateLayout(t,`layout`)},margin:t.default.arrayOf(t.default.number),containerPadding:t.default.arrayOf(t.default.number),rowHeight:t.default.number,maxRows:t.default.number,isBounded:t.default.bool,isDraggable:t.default.bool,isResizable:t.default.bool,allowOverlap:t.default.bool,preventCollision:t.default.bool,useCSSTransforms:t.default.bool,transformScale:t.default.number,isDroppable:t.default.bool,resizeHandles:i,resizeHandle:o,onLayoutChange:t.default.func,onDragStart:t.default.func,onDrag:t.default.func,onDragStop:t.default.func,onResizeStart:t.default.func,onResize:t.default.func,onResizeStop:t.default.func,onDrop:t.default.func,droppingItem:t.default.shape({i:t.default.string.isRequired,w:t.default.number.isRequired,h:t.default.number.isRequired}),children:function(e,t){let r=e[t],i={};n.default.Children.forEach(r,function(e){if(e?.key!=null){if(i[e.key])throw Error(`Duplicate child key "`+e.key+`" found! This will cause problems in ReactGridLayout.`);i[e.key]=!0}})},innerRef:t.default.any}})),Ye=n((e=>{Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=p(a()),n=o(),r=p(c()),i=Be(),s=qe(),l=Z(),u=Me(),d=Je(),f=p(X());function p(e){return e&&e.__esModule?e:{default:e}}function m(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function h(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?m(Object(n),!0).forEach(function(t){g(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):m(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function g(e,t,n){return(t=_(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function _(e){var t=v(e,`string`);return typeof t==`symbol`?t:t+``}function v(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}var y=class extends t.default.Component{constructor(){super(...arguments),g(this,`state`,{resizing:null,dragging:null,className:``}),g(this,`elementRef`,t.default.createRef()),g(this,`onDragStart`,(e,t)=>{let{node:n}=t,{onDragStart:r,transformScale:i}=this.props;if(!r)return;let a={top:0,left:0},{offsetParent:o}=n;if(!o)return;let s=o.getBoundingClientRect(),c=n.getBoundingClientRect(),l=c.left/i,d=s.left/i,f=c.top/i,p=s.top/i;a.left=l-d+o.scrollLeft,a.top=f-p+o.scrollTop,this.setState({dragging:a});let{x:m,y:h}=(0,u.calcXY)(this.getPositionParams(),a.top,a.left,this.props.w,this.props.h);return r.call(this,this.props.i,m,h,{e,node:n,newPosition:a})}),g(this,`onDrag`,(e,t,r)=>{let{node:i,deltaX:a,deltaY:o}=t,{onDrag:s}=this.props;if(!s)return;if(!this.state.dragging)throw Error(`onDrag called before onDragStart.`);let c=this.state.dragging.top+o,l=this.state.dragging.left+a,{isBounded:d,i:f,w:p,h:m,containerWidth:h}=this.props,g=this.getPositionParams();if(d){let{offsetParent:e}=i;if(e){let{margin:t,rowHeight:n}=this.props,r=e.clientHeight-(0,u.calcGridItemWHPx)(m,n,t[1]);c=(0,u.clamp)(c,0,r);let i=(0,u.calcGridColWidth)(g),a=h-(0,u.calcGridItemWHPx)(p,i,t[0]);l=(0,u.clamp)(l,0,a)}}let _={top:c,left:l};r?this.setState({dragging:_}):(0,n.flushSync)(()=>{this.setState({dragging:_})});let{x:v,y}=(0,u.calcXY)(g,c,l,p,m);return s.call(this,f,v,y,{e,node:i,newPosition:_})}),g(this,`onDragStop`,(e,t)=>{let{node:n}=t,{onDragStop:r}=this.props;if(!r)return;if(!this.state.dragging)throw Error(`onDragEnd called before onDragStart.`);let{w:i,h:a,i:o}=this.props,{left:s,top:c}=this.state.dragging,l={top:c,left:s};this.setState({dragging:null});let{x:d,y:f}=(0,u.calcXY)(this.getPositionParams(),c,s,i,a);return r.call(this,o,d,f,{e,node:n,newPosition:l})}),g(this,`onResizeStop`,(e,t,n)=>this.onResizeHandler(e,t,n,`onResizeStop`)),g(this,`onResizeStart`,(e,t,n)=>this.onResizeHandler(e,t,n,`onResizeStart`)),g(this,`onResize`,(e,t,n)=>this.onResizeHandler(e,t,n,`onResize`))}shouldComponentUpdate(e,t){if(this.props.children!==e.children||this.props.droppingPosition!==e.droppingPosition)return!0;let n=(0,u.calcGridItemPosition)(this.getPositionParams(this.props),this.props.x,this.props.y,this.props.w,this.props.h,this.state),r=(0,u.calcGridItemPosition)(this.getPositionParams(e),e.x,e.y,e.w,e.h,t);return!(0,l.fastPositionEqual)(n,r)||this.props.useCSSTransforms!==e.useCSSTransforms}componentDidMount(){this.moveDroppingItem({})}componentDidUpdate(e){this.moveDroppingItem(e)}moveDroppingItem(e){let{droppingPosition:t}=this.props;if(!t)return;let n=this.elementRef.current;if(!n)return;let r=e.droppingPosition||{left:0,top:0},{dragging:i}=this.state,a=i&&t.left!==r.left||t.top!==r.top;if(!i)this.onDragStart(t.e,{node:n,deltaX:t.left,deltaY:t.top});else if(a){let e=t.left-i.left,r=t.top-i.top;this.onDrag(t.e,{node:n,deltaX:e,deltaY:r},!0)}}getPositionParams(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:this.props;return{cols:e.cols,containerPadding:e.containerPadding,containerWidth:e.containerWidth,margin:e.margin,maxRows:e.maxRows,rowHeight:e.rowHeight}}createStyle(e){let{usePercentages:t,containerWidth:n,useCSSTransforms:r}=this.props,i;return r?i=(0,l.setTransform)(e):(i=(0,l.setTopLeft)(e),t&&(i.left=(0,l.perc)(e.left/n),i.width=(0,l.perc)(e.width/n))),i}mixinDraggable(e,n){return t.default.createElement(i.DraggableCore,{disabled:!n,onStart:this.onDragStart,onDrag:this.onDrag,onStop:this.onDragStop,handle:this.props.handle,cancel:`.react-resizable-handle`+(this.props.cancel?`,`+this.props.cancel:``),scale:this.props.transformScale,nodeRef:this.elementRef},e)}curryResizeHandler(e,t){return(n,r)=>t(n,r,e)}mixinResizable(e,n,r){let{cols:i,minW:a,minH:o,maxW:c,maxH:l,transformScale:d,resizeHandles:f,resizeHandle:p}=this.props,m=this.getPositionParams(),h=(0,u.calcGridItemPosition)(m,0,0,i,0).width,g=(0,u.calcGridItemPosition)(m,0,0,a,o),_=(0,u.calcGridItemPosition)(m,0,0,c,l),v=[g.width,g.height],y=[Math.min(_.width,h),Math.min(_.height,1/0)];return t.default.createElement(s.Resizable,{draggableOpts:{disabled:!r},className:r?void 0:`react-resizable-hide`,width:n.width,height:n.height,minConstraints:v,maxConstraints:y,onResizeStop:this.curryResizeHandler(n,this.onResizeStop),onResizeStart:this.curryResizeHandler(n,this.onResizeStart),onResize:this.curryResizeHandler(n,this.onResize),transformScale:d,resizeHandles:f,handle:p},e)}onResizeHandler(e,t,r,i){let{node:a,size:o,handle:s}=t,c=this.props[i];if(!c)return;let{x:d,y:f,i:p,maxH:m,minH:h,containerWidth:g}=this.props,{minW:_,maxW:v}=this.props,y=o;a&&(y=(0,l.resizeItemInDirection)(s,r,o,g),(0,n.flushSync)(()=>{this.setState({resizing:i===`onResizeStop`?null:y})}));let{w:b,h:x}=(0,u.calcWH)(this.getPositionParams(),y.width,y.height,d,f,s);b=(0,u.clamp)(b,Math.max(_,1),v),x=(0,u.clamp)(x,h,m),c.call(this,p,b,x,{e,node:a,size:y,handle:s})}render(){let{x:e,y:n,w:r,h:i,isDraggable:a,isResizable:o,droppingPosition:s,useCSSTransforms:c}=this.props,l=(0,u.calcGridItemPosition)(this.getPositionParams(),e,n,r,i,this.state),d=t.default.Children.only(this.props.children),p=t.default.cloneElement(d,{ref:this.elementRef,className:(0,f.default)(`react-grid-item`,d.props.className,this.props.className,{static:this.props.static,resizing:!!this.state.resizing,"react-draggable":a,"react-draggable-dragging":!!this.state.dragging,dropping:!!s,cssTransforms:c}),style:h(h(h({},this.props.style),d.props.style),this.createStyle(l))});return p=this.mixinResizable(p,l,o),p=this.mixinDraggable(p,a),p}};e.default=y,g(y,`propTypes`,{children:r.default.element,cols:r.default.number.isRequired,containerWidth:r.default.number.isRequired,rowHeight:r.default.number.isRequired,margin:r.default.array.isRequired,maxRows:r.default.number.isRequired,containerPadding:r.default.array.isRequired,x:r.default.number.isRequired,y:r.default.number.isRequired,w:r.default.number.isRequired,h:r.default.number.isRequired,minW:function(e,t){let n=e[t];if(typeof n!=`number`)return Error(`minWidth not Number`);if(n>e.w||n>e.maxW)return Error(`minWidth larger than item width/maxWidth`)},maxW:function(e,t){let n=e[t];if(typeof n!=`number`)return Error(`maxWidth not Number`);if(n<e.w||n<e.minW)return Error(`maxWidth smaller than item width/minWidth`)},minH:function(e,t){let n=e[t];if(typeof n!=`number`)return Error(`minHeight not Number`);if(n>e.h||n>e.maxH)return Error(`minHeight larger than item height/maxHeight`)},maxH:function(e,t){let n=e[t];if(typeof n!=`number`)return Error(`maxHeight not Number`);if(n<e.h||n<e.minH)return Error(`maxHeight smaller than item height/minHeight`)},i:r.default.string.isRequired,resizeHandles:d.resizeHandleAxesType,resizeHandle:d.resizeHandleType,onDragStop:r.default.func,onDragStart:r.default.func,onDrag:r.default.func,onResizeStop:r.default.func,onResizeStart:r.default.func,onResize:r.default.func,isDraggable:r.default.bool.isRequired,isResizable:r.default.bool.isRequired,isBounded:r.default.bool.isRequired,static:r.default.bool,useCSSTransforms:r.default.bool.isRequired,transformScale:r.default.number,className:r.default.string,handle:r.default.string,cancel:r.default.string,droppingPosition:r.default.shape({e:r.default.object.isRequired,left:r.default.number.isRequired,top:r.default.number.isRequired})}),g(y,`defaultProps`,{className:``,cancel:``,handle:``,minH:1,minW:1,maxH:1/0,maxW:1/0,transformScale:1})})),Xe=n((e=>{Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=u(a()),n=Ae(),r=l(X()),i=Z(),o=Me(),s=l(Ye()),c=l(Je());function l(e){return e&&e.__esModule?e:{default:e}}function u(e,t){if(typeof WeakMap==`function`)var n=new WeakMap,r=new WeakMap;return(u=function(e,t){if(!t&&e&&e.__esModule)return e;var i,a,o={__proto__:null,default:e};if(e===null||typeof e!=`object`&&typeof e!=`function`)return o;if(i=t?r:n){if(i.has(e))return i.get(e);i.set(e,o)}for(let t in e)t!=="default"&&{}.hasOwnProperty.call(e,t)&&((a=(i=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,t))&&(a.get||a.set)?i(o,t,a):o[t]=e[t]);return o})(e,t)}function d(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function f(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?d(Object(n),!0).forEach(function(t){p(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):d(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function p(e,t,n){return(t=m(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function m(e){var t=h(e,`string`);return typeof t==`symbol`?t:t+``}function h(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}var g=`react-grid-layout`,_=!1;try{_=/firefox/i.test(navigator.userAgent)}catch{}var v=class extends t.Component{constructor(){super(...arguments),p(this,`state`,{activeDrag:null,layout:(0,i.synchronizeLayoutWithChildren)(this.props.layout,this.props.children,this.props.cols,(0,i.compactType)(this.props),this.props.allowOverlap),mounted:!1,oldDragItem:null,oldLayout:null,oldResizeItem:null,resizing:!1,droppingDOMNode:null,children:[]}),p(this,`dragEnterCounter`,0),p(this,`onDragStart`,(e,t,n,r)=>{let{e:a,node:o}=r,{layout:s}=this.state,c=(0,i.getLayoutItem)(s,e);if(!c)return;let l={w:c.w,h:c.h,x:c.x,y:c.y,placeholder:!0,i:e};return this.setState({oldDragItem:(0,i.cloneLayoutItem)(c),oldLayout:s,activeDrag:l}),this.props.onDragStart(s,c,c,null,a,o)}),p(this,`onDrag`,(e,t,n,r)=>{let{e:a,node:o}=r,{oldDragItem:s}=this.state,{layout:c}=this.state,{cols:l,allowOverlap:u,preventCollision:d}=this.props,f=(0,i.getLayoutItem)(c,e);if(!f)return;let p={w:f.w,h:f.h,x:f.x,y:f.y,placeholder:!0,i:e};c=(0,i.moveElement)(c,f,t,n,!0,d,(0,i.compactType)(this.props),l,u),this.props.onDrag(c,s,f,p,a,o),this.setState({layout:u?c:(0,i.compact)(c,(0,i.compactType)(this.props),l),activeDrag:p})}),p(this,`onDragStop`,(e,t,n,r)=>{let{e:a,node:o}=r;if(!this.state.activeDrag)return;let{oldDragItem:s}=this.state,{layout:c}=this.state,{cols:l,preventCollision:u,allowOverlap:d}=this.props,f=(0,i.getLayoutItem)(c,e);if(!f)return;c=(0,i.moveElement)(c,f,t,n,!0,u,(0,i.compactType)(this.props),l,d);let p=d?c:(0,i.compact)(c,(0,i.compactType)(this.props),l);this.props.onDragStop(p,s,f,null,a,o);let{oldLayout:m}=this.state;this.setState({activeDrag:null,layout:p,oldDragItem:null,oldLayout:null}),this.onLayoutMaybeChanged(p,m)}),p(this,`onResizeStart`,(e,t,n,r)=>{let{e:a,node:o}=r,{layout:s}=this.state,c=(0,i.getLayoutItem)(s,e);c&&(this.setState({oldResizeItem:(0,i.cloneLayoutItem)(c),oldLayout:this.state.layout,resizing:!0}),this.props.onResizeStart(s,c,c,null,a,o))}),p(this,`onResize`,(e,t,n,r)=>{let{e:a,node:o,size:s,handle:c}=r,{oldResizeItem:l}=this.state,{layout:u}=this.state,{cols:d,preventCollision:p,allowOverlap:m}=this.props,h=!1,g,_,v,[y,b]=(0,i.withLayoutItem)(u,e,e=>{let r;return _=e.x,v=e.y,[`sw`,`w`,`nw`,`n`,`ne`].indexOf(c)!==-1&&([`sw`,`nw`,`w`].indexOf(c)!==-1&&(_=e.x+(e.w-t),t=e.x!==_&&_<0?e.w:t,_=_<0?0:_),[`ne`,`n`,`nw`].indexOf(c)!==-1&&(v=e.y+(e.h-n),n=e.y!==v&&v<0?e.h:n,v=v<0?0:v),h=!0),p&&!m&&(r=(0,i.getAllCollisions)(u,f(f({},e),{},{w:t,h:n,x:_,y:v})).filter(t=>t.i!==e.i).length>0,r&&(v=e.y,n=e.h,_=e.x,t=e.w,h=!1)),e.w=t,e.h=n,e});if(!b)return;g=y,h&&(g=(0,i.moveElement)(y,b,_,v,!0,this.props.preventCollision,(0,i.compactType)(this.props),d,m));let x={w:b.w,h:b.h,x:b.x,y:b.y,static:!0,i:e};this.props.onResize(g,l,b,x,a,o),this.setState({layout:m?g:(0,i.compact)(g,(0,i.compactType)(this.props),d),activeDrag:x})}),p(this,`onResizeStop`,(e,t,n,r)=>{let{e:a,node:o}=r,{layout:s,oldResizeItem:c}=this.state,{cols:l,allowOverlap:u}=this.props,d=(0,i.getLayoutItem)(s,e),f=u?s:(0,i.compact)(s,(0,i.compactType)(this.props),l);this.props.onResizeStop(f,c,d,null,a,o);let{oldLayout:p}=this.state;this.setState({activeDrag:null,layout:f,oldResizeItem:null,oldLayout:null,resizing:!1}),this.onLayoutMaybeChanged(f,p)}),p(this,`onDragOver`,e=>{var n;if(e.preventDefault(),e.stopPropagation(),_&&!((n=e.nativeEvent.target)!=null&&n.classList.contains(g)))return!1;let{droppingItem:r,onDropDragOver:i,margin:a,cols:s,rowHeight:c,maxRows:l,width:u,containerPadding:d,transformScale:p}=this.props,m=i?.(e);if(m===!1)return this.state.droppingDOMNode&&this.removeDroppingPlaceholder(),!1;let h=f(f({},r),m),{layout:v}=this.state,y=e.currentTarget.getBoundingClientRect(),b=e.clientX-y.left,x=e.clientY-y.top,S={left:b/p,top:x/p,e};if(!this.state.droppingDOMNode){let e={cols:s,margin:a,maxRows:l,rowHeight:c,containerWidth:u,containerPadding:d||a},n=(0,o.calcXY)(e,x,b,h.w,h.h);this.setState({droppingDOMNode:t.createElement(`div`,{key:h.i}),droppingPosition:S,layout:[...v,f(f({},h),{},{x:n.x,y:n.y,static:!1,isDraggable:!0})]})}else if(this.state.droppingPosition){let{left:e,top:t}=this.state.droppingPosition;(e!=b||t!=x)&&this.setState({droppingPosition:S})}}),p(this,`removeDroppingPlaceholder`,()=>{let{droppingItem:e,cols:t}=this.props,{layout:n}=this.state,r=(0,i.compact)(n.filter(t=>t.i!==e.i),(0,i.compactType)(this.props),t,this.props.allowOverlap);this.setState({layout:r,droppingDOMNode:null,activeDrag:null,droppingPosition:void 0})}),p(this,`onDragLeave`,e=>{e.preventDefault(),e.stopPropagation(),this.dragEnterCounter--,this.dragEnterCounter===0&&this.removeDroppingPlaceholder()}),p(this,`onDragEnter`,e=>{e.preventDefault(),e.stopPropagation(),this.dragEnterCounter++}),p(this,`onDrop`,e=>{e.preventDefault(),e.stopPropagation();let{droppingItem:t}=this.props,{layout:n}=this.state,r=n.find(e=>e.i===t.i);this.dragEnterCounter=0,this.removeDroppingPlaceholder(),this.props.onDrop(n,r,e)})}componentDidMount(){this.setState({mounted:!0}),this.onLayoutMaybeChanged(this.state.layout,this.props.layout)}static getDerivedStateFromProps(e,t){let r;return t.activeDrag?null:(!(0,n.deepEqual)(e.layout,t.propsLayout)||e.compactType!==t.compactType?r=e.layout:(0,i.childrenEqual)(e.children,t.children)||(r=t.layout),r?{layout:(0,i.synchronizeLayoutWithChildren)(r,e.children,e.cols,(0,i.compactType)(e),e.allowOverlap),compactType:e.compactType,children:e.children,propsLayout:e.layout}:null)}shouldComponentUpdate(e,t){return this.props.children!==e.children||!(0,i.fastRGLPropsEqual)(this.props,e,n.deepEqual)||this.state.activeDrag!==t.activeDrag||this.state.mounted!==t.mounted||this.state.droppingPosition!==t.droppingPosition}componentDidUpdate(e,t){if(!this.state.activeDrag){let e=this.state.layout,n=t.layout;this.onLayoutMaybeChanged(e,n)}}containerHeight(){if(!this.props.autoSize)return;let e=(0,i.bottom)(this.state.layout),t=this.props.containerPadding?this.props.containerPadding[1]:this.props.margin[1];return e*this.props.rowHeight+(e-1)*this.props.margin[1]+t*2+`px`}onLayoutMaybeChanged(e,t){t||=this.state.layout,(0,n.deepEqual)(t,e)||this.props.onLayoutChange(e)}placeholder(){let{activeDrag:e}=this.state;if(!e)return null;let{width:n,cols:r,margin:i,containerPadding:a,rowHeight:o,maxRows:c,useCSSTransforms:l,transformScale:u}=this.props;return t.createElement(s.default,{w:e.w,h:e.h,x:e.x,y:e.y,i:e.i,className:`react-grid-placeholder ${this.state.resizing?`placeholder-resizing`:``}`,containerWidth:n,cols:r,margin:i,containerPadding:a||i,maxRows:c,rowHeight:o,isDraggable:!1,isResizable:!1,isBounded:!1,useCSSTransforms:l,transformScale:u},t.createElement(`div`,null))}processGridItem(e,n){if(!e||!e.key)return;let r=(0,i.getLayoutItem)(this.state.layout,String(e.key));if(!r)return null;let{width:a,cols:o,margin:c,containerPadding:l,rowHeight:u,maxRows:d,isDraggable:f,isResizable:p,isBounded:m,useCSSTransforms:h,transformScale:g,draggableCancel:_,draggableHandle:v,resizeHandles:y,resizeHandle:b}=this.props,{mounted:x,droppingPosition:S}=this.state,C=typeof r.isDraggable==`boolean`?r.isDraggable:!r.static&&f,w=typeof r.isResizable==`boolean`?r.isResizable:!r.static&&p,T=r.resizeHandles||y,E=C&&m&&r.isBounded!==!1;return t.createElement(s.default,{containerWidth:a,cols:o,margin:c,containerPadding:l||c,maxRows:d,rowHeight:u,cancel:_,handle:v,onDragStop:this.onDragStop,onDragStart:this.onDragStart,onDrag:this.onDrag,onResizeStart:this.onResizeStart,onResize:this.onResize,onResizeStop:this.onResizeStop,isDraggable:C,isResizable:w,isBounded:E,useCSSTransforms:h&&x,usePercentages:!x,transformScale:g,w:r.w,h:r.h,x:r.x,y:r.y,i:r.i,minH:r.minH,minW:r.minW,maxH:r.maxH,maxW:r.maxW,static:r.static,droppingPosition:n?S:void 0,resizeHandles:T,resizeHandle:b},e)}render(){let{className:e,style:n,isDroppable:a,innerRef:o}=this.props,s=(0,r.default)(g,e),c=f({height:this.containerHeight()},n);return t.createElement(`div`,{ref:o,className:s,style:c,onDrop:a?this.onDrop:i.noop,onDragLeave:a?this.onDragLeave:i.noop,onDragEnter:a?this.onDragEnter:i.noop,onDragOver:a?this.onDragOver:i.noop},t.Children.map(this.props.children,e=>this.processGridItem(e)),a&&this.state.droppingDOMNode&&this.processGridItem(this.state.droppingDOMNode,!0),this.placeholder())}};e.default=v,p(v,`displayName`,`ReactGridLayout`),p(v,`propTypes`,c.default),p(v,`defaultProps`,{autoSize:!0,cols:12,className:``,style:{},draggableHandle:``,draggableCancel:``,containerPadding:null,rowHeight:150,maxRows:1/0,layout:[],margin:[10,10],isBounded:!1,isDraggable:!0,isResizable:!0,allowOverlap:!1,isDroppable:!1,useCSSTransforms:!0,transformScale:1,verticalCompact:!0,compactType:`vertical`,preventCollision:!1,droppingItem:{i:`__dropping-elem__`,h:1,w:1},resizeHandles:[`se`],onLayoutChange:i.noop,onDragStart:i.noop,onDrag:i.noop,onDragStop:i.noop,onResizeStart:i.noop,onResize:i.noop,onResizeStop:i.noop,onDrop:i.noop,onDropDragOver:i.noop})})),Ze=n((e=>{Object.defineProperty(e,"__esModule",{value:!0}),e.findOrGenerateResponsiveLayout=i,e.getBreakpointFromWidth=n,e.getColsFromBreakpoint=r,e.sortBreakpoints=a;var t=Z();function n(e,t){let n=a(e),r=n[0];for(let i=1,a=n.length;i<a;i++){let a=n[i];t>e[a]&&(r=a)}return r}function r(e,t){if(!t[e])throw Error("ResponsiveReactGridLayout: `cols` entry for breakpoint "+e+` is missing!`);return t[e]}function i(e,n,r,i,o,s){if(e[r])return(0,t.cloneLayout)(e[r]);let c=e[i],l=a(n),u=l.slice(l.indexOf(r));for(let t=0,n=u.length;t<n;t++){let n=u[t];if(e[n]){c=e[n];break}}return c=(0,t.cloneLayout)(c||[]),(0,t.compact)((0,t.correctBounds)(c,{cols:o}),s,o)}function a(e){return Object.keys(e).sort(function(t,n){return e[t]-e[n]})}})),Qe=n((e=>{Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=d(a()),n=u(c()),r=Ae(),i=Z(),o=Ze(),s=u(Xe()),l=[`breakpoint`,`breakpoints`,`cols`,`layouts`,`margin`,`containerPadding`,`onBreakpointChange`,`onLayoutChange`,`onWidthChange`];function u(e){return e&&e.__esModule?e:{default:e}}function d(e,t){if(typeof WeakMap==`function`)var n=new WeakMap,r=new WeakMap;return(d=function(e,t){if(!t&&e&&e.__esModule)return e;var i,a,o={__proto__:null,default:e};if(e===null||typeof e!=`object`&&typeof e!=`function`)return o;if(i=t?r:n){if(i.has(e))return i.get(e);i.set(e,o)}for(let t in e)t!=="default"&&{}.hasOwnProperty.call(e,t)&&((a=(i=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,t))&&(a.get||a.set)?i(o,t,a):o[t]=e[t]);return o})(e,t)}function f(){return f=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},f.apply(null,arguments)}function p(e,t){if(e==null)return{};var n,r,i=m(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)===-1&&{}.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}function m(e,t){if(e==null)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(t.indexOf(r)!==-1)continue;n[r]=e[r]}return n}function h(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function g(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?h(Object(n),!0).forEach(function(t){_(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):h(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function _(e,t,n){return(t=v(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function v(e){var t=y(e,`string`);return typeof t==`symbol`?t:t+``}function y(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}var b=e=>Object.prototype.toString.call(e);function x(e,t){return e==null?null:Array.isArray(e)?e:e[t]}var S=class extends t.Component{constructor(){super(...arguments),_(this,`state`,this.generateInitialState()),_(this,`onLayoutChange`,e=>{this.props.onLayoutChange(e,g(g({},this.props.layouts),{},{[this.state.breakpoint]:e}))})}generateInitialState(){let{width:e,breakpoints:t,layouts:n,cols:r}=this.props,i=(0,o.getBreakpointFromWidth)(t,e),a=(0,o.getColsFromBreakpoint)(i,r),s=this.props.verticalCompact===!1?null:this.props.compactType;return{layout:(0,o.findOrGenerateResponsiveLayout)(n,t,i,i,a,s),breakpoint:i,cols:a}}static getDerivedStateFromProps(e,t){if(!(0,r.deepEqual)(e.layouts,t.layouts)){let{breakpoint:n,cols:r}=t;return{layout:(0,o.findOrGenerateResponsiveLayout)(e.layouts,e.breakpoints,n,n,r,e.compactType),layouts:e.layouts}}return null}componentDidUpdate(e){(this.props.width!=e.width||this.props.breakpoint!==e.breakpoint||!(0,r.deepEqual)(this.props.breakpoints,e.breakpoints)||!(0,r.deepEqual)(this.props.cols,e.cols))&&this.onWidthChange(e)}onWidthChange(e){let{breakpoints:t,cols:n,layouts:r,compactType:a}=this.props,s=this.props.breakpoint||(0,o.getBreakpointFromWidth)(this.props.breakpoints,this.props.width),c=this.state.breakpoint,l=(0,o.getColsFromBreakpoint)(s,n),u=g({},r);if(c!==s||e.breakpoints!==t||e.cols!==n){c in u||(u[c]=(0,i.cloneLayout)(this.state.layout));let e=(0,o.findOrGenerateResponsiveLayout)(u,t,s,c,l,a);e=(0,i.synchronizeLayoutWithChildren)(e,this.props.children,l,a,this.props.allowOverlap),u[s]=e,this.props.onBreakpointChange(s,l),this.props.onLayoutChange(e,u),this.setState({breakpoint:s,layout:e,cols:l})}let d=x(this.props.margin,s),f=x(this.props.containerPadding,s);this.props.onWidthChange(this.props.width,d,l,f)}render(){let e=this.props,{breakpoint:n,breakpoints:r,cols:i,layouts:a,margin:o,containerPadding:c,onBreakpointChange:u,onLayoutChange:d,onWidthChange:m}=e,h=p(e,l);return t.createElement(s.default,f({},h,{margin:x(o,this.state.breakpoint),containerPadding:x(c,this.state.breakpoint),onLayoutChange:this.onLayoutChange,layout:this.state.layout,cols:this.state.cols}))}};e.default=S,_(S,`propTypes`,{breakpoint:n.default.string,breakpoints:n.default.object,allowOverlap:n.default.bool,cols:n.default.object,margin:n.default.oneOfType([n.default.array,n.default.object]),containerPadding:n.default.oneOfType([n.default.array,n.default.object]),layouts(e,t){if(b(e[t])!==`[object Object]`)throw Error(`Layout property must be an object. Received: `+b(e[t]));Object.keys(e[t]).forEach(t=>{if(!(t in e.breakpoints))throw Error(`Each key in layouts must align with a key in breakpoints.`);(0,i.validateLayout)(e.layouts[t],`layouts.`+t)})},width:n.default.number.isRequired,onBreakpointChange:n.default.func,onLayoutChange:n.default.func,onWidthChange:n.default.func}),_(S,`defaultProps`,{breakpoints:{lg:1200,md:996,sm:768,xs:480,xxs:0},cols:{lg:12,md:10,sm:6,xs:4,xxs:2},containerPadding:{lg:null,md:null,sm:null,xs:null,xxs:null},layouts:{},margin:[10,10],allowOverlap:!1,onBreakpointChange:i.noop,onLayoutChange:i.noop,onWidthChange:i.noop})})),$e=t({default:()=>Et});function et(e,t){var n=!1,r=!1,i=0;function a(){n&&(n=!1,e()),r&&s()}function o(){ft(a)}function s(){var e=Date.now();if(n){if(e-i<pt)return;r=!0}else n=!0,r=!1,setTimeout(o,t);i=e}return s}function tt(e){return parseFloat(e)||0}function nt(e){return[...arguments].slice(1).reduce(function(t,n){var r=e[`border-`+n+`-width`];return t+tt(r)},0)}function rt(e){for(var t=[`top`,`right`,`bottom`,`left`],n={},r=0,i=t;r<i.length;r++){var a=i[r],o=e[`padding-`+a];n[a]=tt(o)}return n}function it(e){var t=e.getBBox();return lt(0,0,t.width,t.height)}function at(e){var t=e.clientWidth,n=e.clientHeight;if(!t&&!n)return yt;var r=$(e).getComputedStyle(e),i=rt(r),a=i.left+i.right,o=i.top+i.bottom,s=tt(r.width),c=tt(r.height);if(r.boxSizing===`border-box`&&(Math.round(s+a)!==t&&(s-=nt(r,`left`,`right`)+a),Math.round(c+o)!==n&&(c-=nt(r,`top`,`bottom`)+o)),!ot(e)){var l=Math.round(s+a)-t,u=Math.round(c+o)-n;Math.abs(l)!==1&&(s-=l),Math.abs(u)!==1&&(c-=u)}return lt(i.left,i.top,s,c)}function ot(e){return e===$(e).document.documentElement}function st(e){return dt?bt(e)?it(e):at(e):yt}function ct(e){var t=e.x,n=e.y,r=e.width,i=e.height,a=Object.create((typeof DOMRectReadOnly<`u`?DOMRectReadOnly:Object).prototype);return vt(a,{x:t,y:n,width:r,height:i,top:n,right:t+r,bottom:i+n,left:t}),a}function lt(e,t,n,r){return{x:e,y:t,width:n,height:r}}var ut,dt,Q,ft,pt,mt,ht,gt,_t,vt,$,yt,bt,xt,St,Ct,wt,Tt,Et,Dt=i((()=>{ut=(function(){if(typeof Map<`u`)return Map;function e(e,t){var n=-1;return e.some(function(e,r){return e[0]===t?(n=r,!0):!1}),n}return function(){function t(){this.__entries__=[]}return Object.defineProperty(t.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),t.prototype.get=function(t){var n=e(this.__entries__,t),r=this.__entries__[n];return r&&r[1]},t.prototype.set=function(t,n){var r=e(this.__entries__,t);~r?this.__entries__[r][1]=n:this.__entries__.push([t,n])},t.prototype.delete=function(t){var n=this.__entries__,r=e(n,t);~r&&n.splice(r,1)},t.prototype.has=function(t){return!!~e(this.__entries__,t)},t.prototype.clear=function(){this.__entries__.splice(0)},t.prototype.forEach=function(e,t){t===void 0&&(t=null);for(var n=0,r=this.__entries__;n<r.length;n++){var i=r[n];e.call(t,i[1],i[0])}},t}()})(),dt=typeof window<`u`&&typeof document<`u`&&window.document===document,Q=(function(){return typeof global<`u`&&global.Math===Math?global:typeof self<`u`&&self.Math===Math?self:typeof window<`u`&&window.Math===Math?window:Function(`return this`)()})(),ft=(function(){return typeof requestAnimationFrame==`function`?requestAnimationFrame.bind(Q):function(e){return setTimeout(function(){return e(Date.now())},1e3/60)}})(),pt=2,mt=20,ht=[`top`,`right`,`bottom`,`left`,`width`,`height`,`size`,`weight`],gt=typeof MutationObserver<`u`,_t=function(){function e(){this.connected_=!1,this.mutationEventsAdded_=!1,this.mutationsObserver_=null,this.observers_=[],this.onTransitionEnd_=this.onTransitionEnd_.bind(this),this.refresh=et(this.refresh.bind(this),mt)}return e.prototype.addObserver=function(e){~this.observers_.indexOf(e)||this.observers_.push(e),this.connected_||this.connect_()},e.prototype.removeObserver=function(e){var t=this.observers_,n=t.indexOf(e);~n&&t.splice(n,1),!t.length&&this.connected_&&this.disconnect_()},e.prototype.refresh=function(){this.updateObservers_()&&this.refresh()},e.prototype.updateObservers_=function(){var e=this.observers_.filter(function(e){return e.gatherActive(),e.hasActive()});return e.forEach(function(e){return e.broadcastActive()}),e.length>0},e.prototype.connect_=function(){!dt||this.connected_||(document.addEventListener(`transitionend`,this.onTransitionEnd_),window.addEventListener(`resize`,this.refresh),gt?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener(`DOMSubtreeModified`,this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},e.prototype.disconnect_=function(){!dt||!this.connected_||(document.removeEventListener(`transitionend`,this.onTransitionEnd_),window.removeEventListener(`resize`,this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener(`DOMSubtreeModified`,this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},e.prototype.onTransitionEnd_=function(e){var t=e.propertyName,n=t===void 0?``:t;ht.some(function(e){return!!~n.indexOf(e)})&&this.refresh()},e.getInstance=function(){return this.instance_||=new e,this.instance_},e.instance_=null,e}(),vt=(function(e,t){for(var n=0,r=Object.keys(t);n<r.length;n++){var i=r[n];Object.defineProperty(e,i,{value:t[i],enumerable:!1,writable:!1,configurable:!0})}return e}),$=(function(e){return e&&e.ownerDocument&&e.ownerDocument.defaultView||Q}),yt=lt(0,0,0,0),bt=(function(){return typeof SVGGraphicsElement<`u`?function(e){return e instanceof $(e).SVGGraphicsElement}:function(e){return e instanceof $(e).SVGElement&&typeof e.getBBox==`function`}})(),xt=function(){function e(e){this.broadcastWidth=0,this.broadcastHeight=0,this.contentRect_=lt(0,0,0,0),this.target=e}return e.prototype.isActive=function(){var e=st(this.target);return this.contentRect_=e,e.width!==this.broadcastWidth||e.height!==this.broadcastHeight},e.prototype.broadcastRect=function(){var e=this.contentRect_;return this.broadcastWidth=e.width,this.broadcastHeight=e.height,e},e}(),St=function(){function e(e,t){var n=ct(t);vt(this,{target:e,contentRect:n})}return e}(),Ct=function(){function e(e,t,n){if(this.activeObservations_=[],this.observations_=new ut,typeof e!=`function`)throw TypeError(`The callback provided as parameter 1 is not a function.`);this.callback_=e,this.controller_=t,this.callbackCtx_=n}return e.prototype.observe=function(e){if(!arguments.length)throw TypeError(`1 argument required, but only 0 present.`);if(!(typeof Element>`u`||!(Element instanceof Object))){if(!(e instanceof $(e).Element))throw TypeError(`parameter 1 is not of type "Element".`);var t=this.observations_;t.has(e)||(t.set(e,new xt(e)),this.controller_.addObserver(this),this.controller_.refresh())}},e.prototype.unobserve=function(e){if(!arguments.length)throw TypeError(`1 argument required, but only 0 present.`);if(!(typeof Element>`u`||!(Element instanceof Object))){if(!(e instanceof $(e).Element))throw TypeError(`parameter 1 is not of type "Element".`);var t=this.observations_;t.has(e)&&(t.delete(e),t.size||this.controller_.removeObserver(this))}},e.prototype.disconnect=function(){this.clearActive(),this.observations_.clear(),this.controller_.removeObserver(this)},e.prototype.gatherActive=function(){var e=this;this.clearActive(),this.observations_.forEach(function(t){t.isActive()&&e.activeObservations_.push(t)})},e.prototype.broadcastActive=function(){if(this.hasActive()){var e=this.callbackCtx_,t=this.activeObservations_.map(function(e){return new St(e.target,e.broadcastRect())});this.callback_.call(e,t,e),this.clearActive()}},e.prototype.clearActive=function(){this.activeObservations_.splice(0)},e.prototype.hasActive=function(){return this.activeObservations_.length>0},e}(),wt=typeof WeakMap<`u`?new WeakMap:new ut,Tt=function(){function e(t){if(!(this instanceof e))throw TypeError(`Cannot call a class as a function.`);if(!arguments.length)throw TypeError(`1 argument required, but only 0 present.`);var n=new Ct(t,_t.getInstance(),this);wt.set(this,n)}return e}(),[`observe`,`unobserve`,`disconnect`].forEach(function(e){Tt.prototype[e]=function(){var t;return(t=wt.get(this))[e].apply(t,arguments)}}),Et=(function(){return Q.ResizeObserver===void 0?Tt:Q.ResizeObserver})()})),Ot=n((t=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=v;var n=u(a()),r=l(c()),i=l((Dt(),e($e))),o=l(X()),s=[`measureBeforeMount`];function l(e){return e&&e.__esModule?e:{default:e}}function u(e,t){if(typeof WeakMap==`function`)var n=new WeakMap,r=new WeakMap;return(u=function(e,t){if(!t&&e&&e.__esModule)return e;var i,a,o={__proto__:null,default:e};if(e===null||typeof e!=`object`&&typeof e!=`function`)return o;if(i=t?r:n){if(i.has(e))return i.get(e);i.set(e,o)}for(let t in e)t!=="default"&&{}.hasOwnProperty.call(e,t)&&((a=(i=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,t))&&(a.get||a.set)?i(o,t,a):o[t]=e[t]);return o})(e,t)}function d(){return d=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},d.apply(null,arguments)}function f(e,t){if(e==null)return{};var n,r,i=p(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)===-1&&{}.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}function p(e,t){if(e==null)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(t.indexOf(r)!==-1)continue;n[r]=e[r]}return n}function m(e,t,n){return(t=h(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function h(e){var t=g(e,`string`);return typeof t==`symbol`?t:t+``}function g(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}var _=`react-grid-layout`;function v(e){var t;return t=class extends n.Component{constructor(){super(...arguments),m(this,`state`,{width:1280}),m(this,`elementRef`,n.createRef()),m(this,`mounted`,!1),m(this,`resizeObserver`,void 0)}componentDidMount(){this.mounted=!0,this.resizeObserver=new i.default(e=>{if(this.elementRef.current instanceof HTMLElement){let t=e[0].contentRect.width;this.setState({width:t})}});let e=this.elementRef.current;e instanceof HTMLElement&&this.resizeObserver.observe(e)}componentWillUnmount(){this.mounted=!1;let e=this.elementRef.current;e instanceof HTMLElement&&this.resizeObserver.unobserve(e),this.resizeObserver.disconnect()}render(){let t=this.props,{measureBeforeMount:r}=t,i=f(t,s);return r&&!this.mounted?n.createElement(`div`,{className:(0,o.default)(this.props.className,_),style:this.props.style,ref:this.elementRef}):n.createElement(e,d({innerRef:this.elementRef},i,this.state))}},m(t,`defaultProps`,{measureBeforeMount:!1}),m(t,`propTypes`,{measureBeforeMount:r.default.bool}),t}})),kt=r(n(((e,t)=>{t.exports=Xe().default,t.exports.utils=Z(),t.exports.calculateUtils=Me(),t.exports.Responsive=Qe().default,t.exports.Responsive.utils=Ze(),t.exports.WidthProvider=Ot().default}))(),1),At=(0,kt.WidthProvider)(kt.default),jt=d(`div`)(({theme:e})=>({"& .react-grid-item":{borderRadius:`${e.shape.borderRadiusMedium}px`},"& .grid-item-drag-handle":{[e.breakpoints.down(`md`)]:{display:`none`}}})),Mt=d(`div`)(({theme:e})=>({border:`1px solid ${e.palette.divider}`})),Nt=({items:e,onLayoutChange:t,cols:n={lg:12,md:12,sm:6,xs:4,xxs:2},rowHeight:r=180})=>{let i=l(),a=f(i.breakpoints.down(`md`)),o=(0,V.useMemo)(()=>{if(a){let t=0;return e.map(e=>{let r={i:e.id,x:0,y:t,w:n.xs,h:e.h??4,minW:n.xs,minH:e.minH??3,maxW:n.xs,maxH:e.maxH??8,static:!1};return t+=r.h,r})}return e.map((e,t)=>({i:e.id,x:e.x??t%Math.floor(n.lg/(e.w??4))*(e.w??4),y:e.y??Math.floor(t/Math.floor(n.lg/(e.w??4)))*(e.h??4),w:e.w??4,h:e.h??4,minW:e.minW??4,minH:e.minH??3,maxW:e.maxW??12,maxH:e.maxH??8,static:e.static??!1}))},[e,n,a]),s=(0,V.useMemo)(()=>e.map(e=>(0,B.jsx)(Mt,{children:e.component},e.id)),[e]),c=(0,V.useCallback)(e=>{a||t?.(e)},[t,a]);return(0,B.jsx)(jt,{children:(0,B.jsx)(At,{className:`impact-metrics-grid`,layout:o,cols:a?n.xs:n.lg,rowHeight:r,margin:[Number.parseInt(i.spacing(2),10),Number.parseInt(i.spacing(2),10)],containerPadding:[0,0],isDraggable:!1,isResizable:!1,onLayoutChange:c,resizeHandles:[`se`],draggableHandle:`.grid-item-drag-handle`,compactType:a?null:`vertical`,preventCollision:!1,useCSSTransforms:!0,autoSize:!0,allowOverlap:!1,children:s})})};export{se as a,ce as i,ke as n,be as r,Nt as t};
|
package/frontend/build/static/{ImpactMetricsPage-D1CETZR_.js → ImpactMetricsPage-DGH_S9oz.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{o as e,t}from"./react-GZhdek4G.js";import{t as n}from"./jsx-runtime-BnvnyDTF.js";import{v as r}from"./createSimplePaletteValueFilter-BRAMrHWJ.js";import{n as i}from"./ConditionallyRender---uTpMBn.js";import{t as a}from"./Alert-_bLyWbvx.js";import{t as o}from"./Typography-BTdLWIUX.js";import{t as s}from"./Box-BQsxfFmC.js";import{t as c}from"./Button-CebB8EPB.js";import{a as l,i as u,o as d}from"./TooltipResolver-4A1YhwBy.js";import{n as f}from"./formatPath-j72gcKwy.js";import{
|
|
1
|
+
import{o as e,t}from"./react-GZhdek4G.js";import{t as n}from"./jsx-runtime-BnvnyDTF.js";import{v as r}from"./createSimplePaletteValueFilter-BRAMrHWJ.js";import{n as i}from"./ConditionallyRender---uTpMBn.js";import{t as a}from"./Alert-_bLyWbvx.js";import{t as o}from"./Typography-BTdLWIUX.js";import{t as s}from"./Box-BQsxfFmC.js";import{t as c}from"./Button-CebB8EPB.js";import{a as l,i as u,o as d}from"./TooltipResolver-4A1YhwBy.js";import{n as f}from"./formatPath-j72gcKwy.js";import{G as p,t as m}from"./PermissionButton-B-IfzChn.js";import{n as h,t as g}from"./useApiGetter-7FP8Avm4.js";import{r as _,t as v}from"./PageContent-c0NDm5oD.js";import{c as y,s as b,t as x}from"./metricsFormatters-DhX-aU17.js";import{M as S,Ut as C,ws as w,ya as T,zn as E}from"./index-C04TEs4k.js";import{n as D}from"./useImpactMetricsEnabled-wRNO6-Oh.js";import{i as O,n as k,r as A,t as j}from"./GridLayoutWrapper-B_YyjZ7l.js";import{t as M}from"./impact-metrics-icon-6dt-ye-h.js";var N=e(t(),1),P=()=>{let e=`api/admin/impact-metrics/plausible`,{data:t,refetch:n,loading:r,error:i}=h(f(e),()=>g(f(e),`Plausible metrics`),{refreshInterval:30*1e3,revalidateOnFocus:!0});return{data:t||{data:[]},refetch:n,loading:r,error:i}},F=n(),I=({aspectRatio:e,overrideOptions:t={},errorTitle:n=`Failed to load Plausible metrics.`,emptyDataDescription:r=`No Plausible analytics data available.`,noSeriesPlaceholder:i,isPreview:o})=>{let{data:c,loading:l,error:u}=P(),d=C({fill:!0,type:`constant`}),f=(0,N.useMemo)(()=>{if(!c?.data||c.data.length===0)return{labels:[],datasets:[]};let e=[...c.data].sort((e,t)=>new Date(e.date).getTime()-new Date(t.date).getTime());return{labels:e.map(e=>e.date),datasets:[{label:`Events`,data:e.map(e=>e.count),borderColor:`rgb(129, 122, 254)`,backgroundColor:`rgba(129, 122, 254, 0.1)`,fill:!0,tension:.1}]}},[c]),p=!!u,m=l,h=(0,N.useMemo)(()=>!m&&(!c?.data||c.data.length===0||!f.datasets.some(e=>e.data.length>1)),[f,m,c]),g=h?i||(0,F.jsx)(y,{title:`No Plausible data available`,description:r}):m,_={...t,scales:{x:{type:`time`,time:{unit:`hour`,displayFormats:{hour:`MMM dd, HH:mm`},tooltipFormat:`PPpp`},ticks:{maxRotation:45,minRotation:45,maxTicksLimit:8}},y:{beginAtZero:!0,title:{display:!0,text:`Events`},ticks:{precision:0,callback:e=>typeof e==`number`?x(e):e}}},plugins:{legend:{display:!0,position:`bottom`,labels:{usePointStyle:!0,boxWidth:8,padding:12}}},animations:{x:{duration:0},y:{duration:0}}};return(0,F.jsx)(F.Fragment,{children:(0,F.jsx)(s,{sx:o?{}:{height:`100%`,width:`100%`,"& > div":{height:`100% !important`,width:`100% !important`}},children:(0,F.jsx)(b,{data:h||m?d:f,aspectRatio:e,overrideOptions:_,cover:p?(0,F.jsx)(a,{severity:`error`,children:n}):g})})})},L=r(i)(({theme:e})=>({borderRadius:`${e.shape.borderRadiusMedium}px`,boxShadow:`none`,display:`flex`,flexDirection:`column`,height:`100%`})),R=r(s)({flex:1,display:`flex`,flexDirection:`column`,minHeight:0}),z=r(s)(({theme:e})=>({position:`relative`,minWidth:0,flexGrow:1,height:`100%`,display:`flex`,flexDirection:`column`,margin:`auto 0`,padding:e.spacing(3)})),B=r(s)(({theme:e})=>({display:`flex`,gap:e.spacing(2),alignItems:`center`,padding:e.spacing(1.5,2),borderBottom:`1px solid ${e.palette.divider}`})),V=r(s)(({theme:e})=>({display:`flex`,flexDirection:`column`,justifyContent:`flex-end`,flexGrow:1,overflow:`hidden`,textOverflow:`ellipsis`})),H=()=>(0,F.jsxs)(L,{children:[(0,F.jsx)(B,{children:(0,F.jsxs)(V,{children:[(0,F.jsx)(o,{variant:`h3`,children:`Plausible Analytics`}),(0,F.jsx)(o,{variant:`body2`,sx:{color:`text.secondary`},children:`Favorite events from Plausible analytics`})]})}),(0,F.jsx)(R,{children:(0,F.jsx)(z,{children:(0,F.jsx)(I,{aspectRatio:1.5,overrideOptions:{maintainAspectRatio:!1},emptyDataDescription:`No Plausible analytics data available for favorite events.`})})})]}),U=`https://docs.getunleash.io/concepts/impact-metrics`,W=r(s)(({theme:e})=>({display:`flex`,flexDirection:`column`,alignItems:`center`,padding:e.spacing(6,4)})),G=r(s)(({theme:e})=>({marginBottom:e.spacing(3)})),K=r(s)(({theme:e})=>({textAlign:`center`,maxWidth:480,marginBottom:e.spacing(3)})),q=r(s)(({theme:e})=>({display:`flex`,gap:e.spacing(2),alignItems:`center`,marginBottom:e.spacing(4)})),J=r(a)(({theme:e})=>({maxWidth:480,backgroundColor:e.palette.info.light,marginTop:e.spacing(4),color:e.palette.info.dark,"& .MuiAlert-icon":{color:e.palette.info.main}})),Y=({onAddChart:e})=>(0,F.jsx)(v,{header:(0,F.jsx)(_,{title:`Impact metrics`,actions:(0,F.jsx)(m,{variant:`contained`,onClick:e,permission:p,children:`New chart`})}),children:(0,F.jsxs)(W,{children:[(0,F.jsx)(G,{children:(0,F.jsx)(M,{})}),(0,F.jsxs)(K,{children:[(0,F.jsx)(o,{variant:`h3`,component:`h2`,sx:{mb:1.5},children:`No impact metrics yet`}),(0,F.jsx)(o,{sx:{color:`text.secondary`},children:`Impact metrics help you measure how feature flags affect your application's performance. Get started by sending your first metrics from your code.`})]}),(0,F.jsxs)(q,{children:[(0,F.jsx)(c,{variant:`text`,href:U,target:`_blank`,rel:`noopener noreferrer`,children:`Read the docs`}),(0,F.jsx)(m,{variant:`contained`,onClick:e,permission:p,children:`Create your first chart`})]}),(0,F.jsxs)(J,{severity:`info`,icon:(0,F.jsx)(T,{}),children:[(0,F.jsx)(`strong`,{children:`Tip:`}),` Once you've set up metrics, you'll be able to create charts, set up safeguards, and monitor your application's health in real-time.`]})]})});r(s)(({theme:e})=>({display:`flex`,alignItems:`center`,cursor:`move`,padding:e.spacing(.5),borderRadius:e.shape.borderRadius,color:e.palette.text.secondary,"&:hover":{backgroundColor:e.palette.action.hover,color:e.palette.text.primary}}));var X=()=>{let[e,t]=(0,N.useState)(!1),[n,r]=(0,N.useState)(),{setToastApiError:i}=l(),a=w(`plausibleMetrics`),{trackEvent:s}=d(),{charts:c,layout:f,loading:h,error:g,addChart:v,updateChart:y,deleteChart:b}=O(),{metricOptions:x,loading:C,error:T}=S(),E=()=>{r(void 0),t(!0),s(`impact-metrics`,{props:{eventType:`global chart modal open`}})},D=e=>{r(e),t(!0)},M=async e=>{try{n?await y(n.id,e):await v(e),t(!1)}catch(e){i(u(e))}},P=(0,N.useCallback)(async e=>{try{await b(e)}catch(e){i(u(e))}},[b]),I=(0,N.useMemo)(()=>{let e=[];if(a){let t={id:`plausible-analytics`,component:(0,F.jsx)(H,{}),w:6,h:2};e.push(t)}let t=c.map((e,t)=>{let n=f?.find(t=>t.i===e.id);return{id:e.id,component:(0,F.jsx)(k,{config:e,onEdit:D,onDelete:P}),w:n?.w??6,h:n?.h??4,x:n?.x,y:n?.y,minW:4,minH:2,maxW:12,maxH:8}});return[...e,...t]},[c,f,D,P,a]),L=T||g,R=C||h,z=c.length>=20,B=R||!!L||z;return(0,F.jsxs)(F.Fragment,{children:[c.length===0&&!R?(0,F.jsx)(Y,{onAddChart:E}):(0,F.jsxs)(F.Fragment,{children:[(0,F.jsx)(_,{title:`Impact metrics`,titleElement:(0,F.jsx)(o,{variant:`h1`,component:`span`,children:`Impact metrics`}),actions:(0,F.jsx)(m,{variant:`contained`,onClick:E,disabled:B,permission:p,tooltipProps:z?{title:`Maximum of 20 impact metrics charts allowed`,arrow:!0}:void 0,children:`New chart`})}),I.length>0&&(0,F.jsx)(j,{items:I})]}),(0,F.jsx)(A,{open:e,onClose:()=>t(!1),onSave:M,initialConfig:n,metrics:x,loading:C||h})]})},Z=r(`div`)(({theme:e})=>({paddingTop:e.spacing(2)})),Q=r(`div`)(({theme:e})=>({display:`flex`,flexDirection:`column`,gap:e.spacing(4),paddingBottom:e.spacing(4)})),$=()=>D()?(0,F.jsx)(Z,{children:(0,F.jsx)(Q,{children:(0,F.jsx)(X,{})})}):(0,F.jsx)(E,{});export{$ as ImpactMetricsPage};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{o as e,t}from"./react-GZhdek4G.js";import{r as n}from"./chunk-QUQL4437-Dr42NpoL.js";import{t as r}from"./useTheme-CQqAmDLr.js";import{t as i}from"./jsx-runtime-BnvnyDTF.js";import{v as a}from"./createSimplePaletteValueFilter-BRAMrHWJ.js";import{t as o}from"./Tooltip-BaILXXti.js";import{b as s,i as c,r as l,t as u}from"./TextField-oipjeg6n.js";import{g as d}from"./Popover-CUTnSn2h.js";import{t as f}from"./Radio-DL8ja0ll.js";import{i as p}from"./CircularProgress-C_LUU3DK.js";import{n as m}from"./ConditionallyRender---uTpMBn.js";import{r as h,t as g}from"./Alert-_bLyWbvx.js";import{t as _}from"./Typography-BTdLWIUX.js";import{t as v}from"./Box-BQsxfFmC.js";import{t as y}from"./Button-CebB8EPB.js";import{t as ee}from"./Dialog-C-xQxqWX.js";import{t as te}from"./Divider-CsdWvu5F.js";import{t as b}from"./FormControlLabel-F5gDLixN.js";import{t as ne}from"./Link-CfIScd2f.js";import{a as re,i as x,n as S,o as ie,r as ae,t as oe}from"./useEnvironments-CTguhgy0.js";import{t as se}from"./Close-DyTASMSq.js";import{t as ce}from"./format-C8UVjLNw.js";import{t as le}from"./formatDistanceToNow-CyouiCIY.js";import{r as ue,t as de}from"./PageContent-c0NDm5oD.js";import{i as C,l as fe,n as pe,s as me,t as w}from"./metricsFormatters-DhX-aU17.js";import{Ba as he,Bs as T,Eo as E,Ja as ge,Jo as _e,Ko as D,Ls as ve,M as ye,Nr as be,Ro as xe,Rs as Se,U as Ce,Vi as O,Vo as we,Vs as k,Xs as Te,bs as Ee,fs as De,go as Oe,ho as A,po as ke,ro as j,rs as M,ya as Ae,za as je,zs as Me}from"./index-C04TEs4k.js";import{a as Ne,c as N,i as Pe,l as P,n as Fe,o as F,r as Ie,s as Le,t as Re}from"./useGroupedImpactMetricsData-CW9qnV2y.js";import{t as ze}from"./impact-metrics-icon-6dt-ye-h.js";var I=e(t(),1),L=e=>{let t=e>0?`+`:e<0?`−`:``,n=Math.abs(e);return`${t}${n>=10||Number.isInteger(n)?`${Math.round(n)}`:n.toFixed(1)}%`},R=2,z=(e,t,n,r,i)=>n===t?(r+i)/2:r+(e-t)/(n-t)*(i-r),Be=e=>{let t=e.data.filter(([,e])=>Number.isFinite(e));if(t.length<2)return null;let n=t.map(([e])=>e),r=t.map(([,e])=>e),i=n[0],a=n[n.length-1],o=Math.min(...r),s=Math.max(...r),c=R,l=64-R,u=e=>z(e,i,a,0,320),d=e=>z(e,o,s,l,c),f=t.map(([e,t],n)=>`${n===0?`M`:`L`} ${u(e).toFixed(1)} ${d(t).toFixed(1)}`).join(` `),p=u(i).toFixed(1);return{line:f,area:`${f} L ${u(a).toFixed(1)} 64 L ${p} 64 Z`}},B=i(),Ve=a(v)(({theme:e})=>({position:`relative`,display:`flex`,flexDirection:`column`,flex:1,justifyContent:`center`,gap:e.spacing(.5),margin:e.spacing(-3,-3,-3,-3),padding:e.spacing(4,3,4,3),borderTopRightRadius:e.shape.borderRadiusMedium,background:e.mode===`dark`?`linear-gradient(135deg, ${e.palette.background.alternative} 0%, ${e.palette.action.alternative} 100%)`:`linear-gradient(135deg, ${e.palette.primary.main} 0%, ${e.palette.primary.dark} 100%)`,color:e.palette.common.white,overflow:`hidden`,[e.breakpoints.down(`lg`)]:{margin:e.spacing(-2.5,-2,-2.5,-2),padding:e.spacing(3.5,2,3.5,2),borderTopRightRadius:0}})),He=a(v)(({theme:e})=>({display:`grid`,gridTemplateColumns:`minmax(0, 1fr) minmax(140px, 0.6fr)`,gap:e.spacing(2.5),alignItems:`stretch`,[e.breakpoints.down(`md`)]:{gridTemplateColumns:`1fr`,gap:e.spacing(1.5),alignItems:`center`}})),Ue=a(v)(({theme:e})=>({display:`flex`,flexDirection:`column`,gap:e.spacing(.5),minWidth:0})),We=a(v)(({theme:e})=>({width:`100%`,minHeight:64,display:`flex`,alignItems:`stretch`,[e.breakpoints.down(`md`)]:{height:64*.7,minHeight:`unset`}})),Ge=a(v)(({theme:e})=>({display:`inline-flex`,alignItems:`center`,gap:e.spacing(.75),color:e.palette.common.white})),Ke=a(_)(({theme:e})=>({fontSize:e.fontSizes.smallerBody,fontWeight:e.typography.fontWeightBold,color:e.palette.common.white,textTransform:`uppercase`,letterSpacing:`0.08em`})),qe=a(_)(({theme:e})=>({fontSize:e.fontSizes.smallBody,fontWeight:e.typography.fontWeightBold,color:e.palette.common.white,lineHeight:1.3,display:`-webkit-box`,WebkitLineClamp:2,WebkitBoxOrient:`vertical`,overflow:`hidden`,overflowWrap:`anywhere`})),Je=a(v)(({theme:e})=>({display:`flex`,alignItems:`baseline`,gap:e.spacing(1),marginTop:e.spacing(1.5)})),Ye=a(_)(({theme:e})=>({fontSize:e.typography.h2.fontSize,fontWeight:700,color:e.palette.common.white,lineHeight:1})),Xe=a(v)(({theme:e})=>({display:`inline-flex`,alignItems:`center`,gap:e.spacing(.5),fontSize:e.fontSizes.smallBody})),Ze=a(_)(()=>({color:`rgba(255, 255, 255, 0.75)`,fontSize:`0.75rem`})),Qe=a(`svg`)({width:`100%`,height:`100%`,display:`block`}),$e=e=>e===null||e===0?`flat`:e>0?`up`:`down`,V=e=>`${e>0?`+`:e<0?`−`:``}${w(Math.abs(e))}`,et=({goalMetricLabel:e,summary:t,series:n,timeLabel:i})=>{let a=r(),o=(0,I.useId)(),s=$e(t.deltaAbs),c=n?Be(n):null,l=t.mode===`latest`&&t.deltaAbs!==null&&t.deltaAbs!==0,u=a.palette.common.white,d=a.palette.common.white,f=s===`up`?P:s===`down`?A:N,p=t.mode===`cumulative`?`Total over ${i.toLowerCase()}`:`vs. start of ${i.toLowerCase()}`;return(0,B.jsxs)(Ve,{children:[(0,B.jsxs)(Ge,{children:[(0,B.jsx)(De,{sx:{fontSize:16}}),(0,B.jsx)(Ke,{children:`Goal`})]}),(0,B.jsxs)(He,{children:[(0,B.jsxs)(Ue,{children:[(0,B.jsx)(qe,{title:e,children:e}),(0,B.jsxs)(Je,{children:[(0,B.jsx)(Ye,{children:w(t.current)}),l&&t.deltaAbs!==null?(0,B.jsxs)(Xe,{sx:{color:u},children:[(0,B.jsx)(f,{sx:{fontSize:16}}),(0,B.jsx)(_,{component:`span`,sx:{fontSize:`inherit`,fontWeight:600,color:`inherit`},children:t.deltaPct===null?V(t.deltaAbs):`${L(t.deltaPct)} (${V(t.deltaAbs)})`})]}):null]}),(0,B.jsx)(Ze,{variant:`caption`,children:p})]}),c?(0,B.jsx)(We,{children:(0,B.jsxs)(Qe,{viewBox:`0 0 320 64`,preserveAspectRatio:`none`,role:`img`,"aria-label":`${e} trend sparkline`,children:[(0,B.jsx)(`defs`,{children:(0,B.jsxs)(`linearGradient`,{id:o,x1:`0`,y1:`0`,x2:`0`,y2:`1`,children:[(0,B.jsx)(`stop`,{offset:`0%`,stopColor:d,stopOpacity:.35}),(0,B.jsx)(`stop`,{offset:`100%`,stopColor:d,stopOpacity:0})]})}),(0,B.jsx)(`path`,{d:c.area,fill:`url(#${o})`,stroke:`none`}),(0,B.jsx)(`path`,{d:c.line,fill:`none`,stroke:d,strokeWidth:1.5,strokeLinejoin:`round`,strokeLinecap:`round`,vectorEffect:`non-scaling-stroke`})]})}):null]})]})},tt=a(v)(({theme:e})=>({borderRadius:e.shape.borderRadiusMedium,border:`1px solid ${e.palette.divider}`,backgroundColor:e.palette.background.paper,color:`inherit`})),nt=a(v)(({theme:e})=>({display:`flex`,flexDirection:`row`,[e.breakpoints.down(`lg`)]:{flexDirection:`column`}})),rt=a(v)({flex:2,minWidth:0,display:`flex`,flexDirection:`column`}),it=a(v)(({theme:e})=>({flex:1,display:`flex`,flexDirection:`column`,backgroundColor:e.palette.background.elevation1,borderTopRightRadius:e.shape.borderRadiusMedium,borderBottomRightRadius:e.shape.borderRadiusMedium,[e.breakpoints.down(`lg`)]:{borderTopRightRadius:0,borderBottomLeftRadius:e.shape.borderRadiusMedium}})),at=a(v)(({theme:e})=>({display:`flex`,flexDirection:`column`,padding:e.spacing(1.5,3,0,3),minWidth:0,[e.breakpoints.down(`lg`)]:{padding:e.spacing(1.5,2,0,2)}})),ot=a(v)(({theme:e})=>({display:`flex`,alignItems:`flex-end`,padding:e.spacing(3,3,0,3),minWidth:0,[e.breakpoints.down(`lg`)]:{padding:e.spacing(2.5,2,0,2)}})),st=a(_)(({theme:e})=>({fontSize:e.fontSizes.smallBody,fontWeight:e.typography.fontWeightBold,color:e.palette.text.primary})),ct=a(_)(({theme:e})=>({fontSize:e.fontSizes.smallerBody,color:e.palette.text.secondary})),lt=a(_)(({theme:e})=>({fontSize:e.fontSizes.smallerBody,fontWeight:e.typography.fontWeightBold,color:e.palette.text.secondary,textTransform:`uppercase`,letterSpacing:`0.06em`})),ut=a(v,{shouldForwardProp:e=>e!==`heightSpacing`})(({theme:e,heightSpacing:t})=>({display:`flex`,minWidth:0,flex:1,minHeight:e.spacing(t.base),padding:e.spacing(1.5,3),"& > *":{minWidth:0,flex:1},[e.breakpoints.down(`lg`)]:{minHeight:e.spacing(t.lg),padding:e.spacing(1.5,2)},[e.breakpoints.down(`sm`)]:{minHeight:e.spacing(t.sm)}})),dt=a(v)(({theme:e})=>({flex:1,minWidth:0,display:`flex`,flexDirection:`column`,justifyContent:`center`,padding:e.spacing(1.5,3,3,3),[e.breakpoints.down(`lg`)]:{padding:e.spacing(1.5,2,2.5,2)}})),ft=a(v)(({theme:e})=>({flex:1,display:`flex`,flexDirection:`column`,padding:e.spacing(3,3,3,3),borderBottom:`1px solid ${e.palette.divider}`,[e.breakpoints.down(`lg`)]:{padding:e.spacing(2.5,2,2.5,2)}})),pt=a(v)(({theme:e})=>({flex:1,display:`flex`,flexDirection:`column`,padding:e.spacing(2,2.5,1.25,2.5),borderBottom:`1px solid ${e.palette.divider}`,[e.breakpoints.down(`lg`)]:{padding:e.spacing(1.5,2,1,2)}})),mt=new Set([`count`,`sum`]),ht=({title:e,subtitle:t,timeRange:n,aggregationMode:r,stepSeries:i,stepTotals:a,featureEvents:o,start:s,end:c,loading:l,chartHeightSpacing:u,totalsHeaderSlot:d,totalsMiddleSlot:f,totalsLabel:p})=>{let m=r&&!mt.has(r)?`Last recorded value`:`Totals`;return(0,B.jsx)(tt,{children:(0,B.jsxs)(nt,{children:[(0,B.jsxs)(rt,{children:[(0,B.jsxs)(at,{children:[(0,B.jsx)(st,{children:e}),(0,B.jsx)(ct,{children:t})]}),(0,B.jsx)(ut,{heightSpacing:u,children:(0,B.jsx)(Fe,{stepSeries:i,timeRange:n,start:s,end:c,loading:l,featureEvents:o})})]}),(0,B.jsxs)(it,{children:[(0,B.jsx)(ft,{children:d}),f?(0,B.jsx)(pt,{children:f}):null,(0,B.jsx)(ot,{children:(0,B.jsx)(lt,{children:p??m})}),(0,B.jsx)(dt,{children:(0,B.jsx)(Le,{steps:a})})]})]})})},gt=[`initial`,`pre-live`,`live`,`completed`,`archived`,`unknown`],_t=e=>e.lifecycleStage??`unknown`,vt=a(`div`)(({theme:e})=>({display:`flex`,alignItems:`baseline`,gap:e.spacing(1),marginBottom:e.spacing(1.5)})),yt=a(_)(({theme:e})=>({fontSize:e.fontSizes.bodySize,fontWeight:e.typography.fontWeightBold,color:e.palette.text.primary})),bt=a(_)(({theme:e})=>({fontSize:e.fontSizes.smallerBody,color:e.palette.text.secondary})),xt=a(ae)({"& th:first-of-type":{borderBottomLeftRadius:0},"& th:last-of-type":{borderBottomRightRadius:0}}),St=a(m)(({theme:e})=>({borderRadius:e.shape.borderRadiusLarge,boxShadow:`none`,border:`1px solid ${e.palette.divider}`,overflow:`hidden`})),Ct=a(S)(({theme:e})=>({backgroundColor:e.palette.background.elevation1})),wt=a(x)(({theme:e})=>({padding:e.spacing(.75,2),color:e.palette.text.secondary,fontSize:e.fontSizes.smallerBody,fontWeight:e.typography.fontWeightBold,letterSpacing:`0.04em`,textTransform:`uppercase`})),Tt=a(`button`)(({theme:e})=>({all:`unset`,display:`flex`,alignItems:`center`,gap:e.spacing(.75),cursor:`pointer`,"&:focus-visible":{outline:`2px solid ${e.palette.primary.main}`,outlineOffset:2,borderRadius:e.shape.borderRadius}})),Et=a(v)(({theme:e})=>({display:`inline-flex`,alignItems:`center`,color:e.palette.text.disabled,"& svg":{fontSize:16}})),H=a(v)({display:`inline-flex`,alignItems:`center`,"& svg":{height:18,width:`auto`,display:`block`}}),Dt=a(`span`)(({theme:e})=>({color:e.palette.text.disabled,fontWeight:e.typography.fontWeightRegular,textTransform:`none`,letterSpacing:0,marginLeft:e.spacing(.25)})),Ot=a(v)(({theme:e})=>({display:`inline-flex`,alignItems:`center`,gap:e.spacing(1),color:e.palette.text.primary,fontWeight:e.typography.fontWeightMedium})),kt=a(ne)(({theme:e})=>({fontWeight:e.typography.fontWeightBold})),At=a(v)(({theme:e})=>({display:`inline-flex`,alignItems:`center`,gap:e.spacing(.75)})),jt=a(`span`)(({theme:e})=>({color:e.palette.text.disabled})),Mt=({stage:e})=>(0,B.jsxs)(At,{children:[(0,B.jsx)(H,{children:(0,B.jsx)(we,{stage:{name:e}})}),(0,B.jsx)(`span`,{children:xe(e)})]}),Nt=({groupKey:e,count:t,collapsed:n,onToggle:r})=>(0,B.jsx)(Ct,{children:(0,B.jsx)(wt,{colSpan:4,children:(0,B.jsxs)(Tt,{type:`button`,"aria-expanded":!n,onClick:r,children:[(0,B.jsx)(Et,{children:n?(0,B.jsx)(he,{}):(0,B.jsx)(Ee,{})}),e===`unknown`?(0,B.jsx)(`span`,{children:`Not found`}):(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(H,{children:(0,B.jsx)(we,{stage:{name:e}})}),(0,B.jsx)(`span`,{children:xe(e)})]}),(0,B.jsx)(Dt,{children:t})]})})}),Pt=({feature:e})=>(0,B.jsxs)(S,{children:[(0,B.jsx)(x,{children:(0,B.jsx)(Ot,{children:e.project?(0,B.jsx)(kt,{component:n,to:`/projects/${e.project}/features/${e.name}`,underline:`hover`,children:e.name}):(0,B.jsx)(`span`,{children:e.name})})}),(0,B.jsx)(x,{children:e.project}),(0,B.jsx)(x,{sx:{textTransform:`capitalize`},children:e.type}),(0,B.jsx)(x,{children:e.lifecycleStage?(0,B.jsx)(Mt,{stage:e.lifecycleStage}):(0,B.jsx)(jt,{children:`—`})})]}),Ft=({features:e})=>{let[t,n]=(0,I.useState)({}),r=(0,I.useMemo)(()=>gt.map(t=>({key:t,entries:e.filter(e=>_t(e)===t)})).filter(e=>e.entries.length>0),[e]);if(e.length===0)return null;let i=e=>n(t=>({...t,[e]:!t[e]}));return(0,B.jsxs)(v,{children:[(0,B.jsxs)(vt,{children:[(0,B.jsx)(yt,{children:`Followed features`}),(0,B.jsx)(bt,{children:`${e.length} total`})]}),(0,B.jsx)(St,{children:(0,B.jsxs)(ie,{children:[(0,B.jsx)(xt,{children:(0,B.jsxs)(S,{children:[(0,B.jsx)(x,{children:`Name`}),(0,B.jsx)(x,{children:`Project`}),(0,B.jsx)(x,{children:`Type`}),(0,B.jsx)(x,{children:`Lifecycle stage`})]})}),(0,B.jsx)(re,{children:r.map(({key:e,entries:n})=>(0,B.jsxs)(I.Fragment,{children:[(0,B.jsx)(Nt,{groupKey:e,count:n.length,collapsed:!!t[e],onToggle:()=>i(e)}),t[e]?null:n.map(e=>(0,B.jsx)(Pt,{feature:e},e.name))]},e))})]})})]})},It=1,U={hour:5*6e4,day:60*6e4,week:360*6e4,month:180*6e4,threeMonths:10080*6e4,sixMonths:10080*6e4},Lt=({events:e,goalSeries:t,aggregationMode:n,visibleWindow:r,timeRange:i})=>{if(!Rt(t)||!zt(r))return[];let a=Bt(e);return Kt(Gt(a.map((e,o)=>Vt(e,{previousFlip:a[o-1],nextFlip:a[o+1],goalSeries:t,aggregationMode:n,visibleWindow:r,timeRange:i})).filter(Wt)))},Rt=e=>!!(e&&e.data.length>0),zt=e=>e!==null&&Number.isFinite(e.minMs)&&Number.isFinite(e.maxMs),Bt=e=>e.filter(e=>!!e.featureName).sort((e,t)=>e.timestamp-t.timestamp).map(e=>({featureName:e.featureName,atSec:e.timestamp/1e3,event:e})),Vt=(e,t)=>{let n=Ht(e,t);if(n<=0)return{featureName:e.featureName,deltaPct:null};let r=W(e.atSec-n,e.atSec,t),i=W(e.atSec,e.atSec+n,t),a=G(r,t),o=G(i,t);return a===null||o===null||a===0?{featureName:e.featureName,deltaPct:null}:{featureName:e.featureName,deltaPct:(o-a)/a*100,detail:{event:e.event,halfWindowMs:n*1e3,before:a,after:o,deltaAbs:o-a,preSeries:r,postSeries:i}}},Ht=(e,{previousFlip:t,nextFlip:n,visibleWindow:r,timeRange:i})=>{let a=U[i]/1e3,o=t?(e.atSec-t.atSec)/2:1/0,s=n?(n.atSec-e.atSec)/2:1/0,c=e.atSec-r.minMs/1e3,l=r.maxMs/1e3-e.atSec;return Math.min(a,o,s,c,l)},Ut=new Set([`count`,`sum`]),W=(e,t,{goalSeries:n})=>n.data.filter(([n,r])=>n>=e&&n<t&&Number.isFinite(r)),G=(e,{aggregationMode:t})=>{if(e.length===0)return null;let n=e.reduce((e,[,t])=>e+t,0);return Ut.has(t)?n:n/e.length},Wt=e=>e.deltaPct!==null,Gt=e=>{let t=new Map;for(let n of e){let e=t.get(n.featureName);(e===void 0||Math.abs(n.deltaPct)>=Math.abs(e.deltaPct))&&t.set(n.featureName,n)}return[...t.values()]},Kt=e=>e.map(({featureName:e,deltaPct:t,detail:n})=>({featureName:e,deltaPct:t,tone:qt(t),detail:n})).sort((e,t)=>Math.abs(t.deltaPct)-Math.abs(e.deltaPct)||e.featureName.localeCompare(t.featureName)),qt=e=>Math.abs(e)<It?`flat`:e>0?`up`:`down`,K=e=>{let t=Math.round(e/(60*1e3));if(t<60)return`${t}m`;let n=Math.round(e/(3600*1e3));return n<24?`${n}h`:`${Math.round(e/(1440*60*1e3))}d`},Jt=new Set([`count`,`sum`]),q=a(ee)(({theme:e})=>({"& .MuiDialog-paper":{borderRadius:e.shape.borderRadiusLarge,overflow:`hidden`}})),Yt=a(v)(({theme:e})=>({display:`flex`,alignItems:`flex-start`,justifyContent:`space-between`,gap:e.spacing(1.5),padding:e.spacing(2.5,3,1.5,3)})),Xt=a(v)(({theme:e})=>({display:`flex`,flexDirection:`column`,gap:e.spacing(.5),minWidth:0})),Zt=a(v)(({theme:e})=>({display:`flex`,alignItems:`center`,gap:e.spacing(1),minWidth:0})),Qt=a(_)(({theme:e})=>({fontSize:e.typography.h2.fontSize,fontWeight:700,color:e.palette.text.primary,lineHeight:1.2,whiteSpace:`nowrap`,overflow:`hidden`,textOverflow:`ellipsis`})),$t=a(v)(({theme:e})=>({display:`inline-flex`,alignItems:`center`,gap:e.spacing(.5),padding:e.spacing(.25,1),borderRadius:999,fontSize:e.fontSizes.smallerBody,fontWeight:600,flexShrink:0})),en=a(_)(({theme:e})=>({fontSize:e.fontSizes.smallerBody,color:e.palette.text.secondary})),tn=a(v)(({theme:e})=>({padding:e.spacing(1.5,3,3,3),display:`flex`,flexDirection:`column`,gap:e.spacing(2)})),nn=a(v)(({theme:e})=>({display:`flex`,flexDirection:`column`,alignItems:`center`,gap:e.spacing(1.5),padding:e.spacing(2.5,3),borderRadius:e.shape.borderRadiusMedium,backgroundColor:e.palette.background.elevation1})),rn=a(v)(({theme:e})=>({display:`flex`,alignItems:`baseline`,gap:e.spacing(2.5),color:e.palette.text.secondary})),J=a(v)({display:`flex`,flexDirection:`column`,alignItems:`center`}),Y=a(_)(({theme:e})=>({fontSize:e.fontSizes.smallerBody,fontWeight:600,color:e.palette.text.secondary,textTransform:`uppercase`,letterSpacing:`0.06em`})),an=a(_)(({theme:e})=>({fontSize:e.typography.h3.fontSize,fontWeight:600,color:e.palette.text.primary,lineHeight:1.2})),on=a(v)(({theme:e})=>({color:e.palette.text.disabled,fontSize:e.typography.h3.fontSize,fontWeight:300,alignSelf:`center`,paddingBottom:e.spacing(.5)})),sn=a(v,{shouldForwardProp:e=>e!==`tone`})(({theme:e,tone:t})=>({display:`flex`,flexDirection:`column`,alignItems:`center`,gap:e.spacing(.25),color:t===`up`?e.palette.success.main:t===`down`?e.palette.error.main:e.palette.text.secondary})),cn=a(_)(({theme:e})=>({fontSize:e.typography.h1.fontSize,fontWeight:700,lineHeight:1.1,color:`inherit`,display:`inline-flex`,alignItems:`center`,gap:e.spacing(.5)})),ln=a(_)(({theme:e})=>({fontSize:e.fontSizes.smallerBody,color:e.palette.text.secondary})),un=a(v)({position:`relative`,width:`100%`}),dn=e=>`${e>0?`+`:e<0?`−`:``}${w(Math.abs(e))}`,fn=(e,t,n,r)=>{let i=[...e.preSeries,...e.postSeries].sort(([e],[t])=>e-t);return{labels:i.map(([e])=>new Date(e*1e3)),datasets:[{label:`Goal`,data:i.map(([,e])=>e),borderColor:t,backgroundColor:fe(r,n),fill:!0,borderWidth:2,pointRadius:0,pointHoverRadius:4,tension:.2,spanGaps:!0}]}},pn=(e,t,n)=>{let r=e.event.timestamp,i=e.halfWindowMs;return{responsive:!0,interaction:{mode:`index`,intersect:!1},layout:{padding:{top:12,right:8,left:8,bottom:4}},scales:{x:{type:`time`,min:r-i,max:r+i,ticks:{maxRotation:0,maxTicksLimit:5,font:{size:10}},grid:{display:!1}},y:{beginAtZero:!1,ticks:{maxTicksLimit:4,font:{size:10},callback:e=>typeof e==`number`?w(e):e}}},plugins:{legend:{display:!1},annotation:{annotations:{"pre-tint":{type:`box`,xMin:r-i,xMax:r,backgroundColor:n,borderWidth:0,drawTime:`beforeDatasetsDraw`},"event-line":{type:`line`,xMin:r,xMax:r,borderColor:t,borderWidth:2,borderDash:[4,3]}}}},animations:{x:{duration:0},y:{duration:0}}}},mn=({impact:e,aggregationMode:t,onClose:n})=>{let i=r(),a=e!==null,o=Jt.has(t),s=e?Pe(i,e.detail.event.type):i.palette.text.secondary,c=(0,I.useMemo)(()=>e?fn(e.detail,i.palette.primary.main,F(i.palette.primary.main,0),F(i.palette.primary.main,.18)):null,[e,i.palette.primary.main]),l=(0,I.useMemo)(()=>e?pn(e.detail,i.palette.primary.main,F(i.palette.text.primary,.04)):null,[e,i.palette.primary.main,i.palette.text.primary]);if(!e)return(0,B.jsx)(q,{open:a,onClose:n,maxWidth:`sm`,fullWidth:!0});let{detail:u,tone:d,deltaPct:f}=e,{event:p}=u,m=d===`up`?P:d===`down`?A:N,g=le(new Date(p.timestamp),{addSuffix:!0}),_=ce(new Date(p.timestamp),`MMM d 'at' HH:mm`),v=`±${K(u.halfWindowMs)} around the flip`,y=o?`Sum of the goal · ${v}`:`Average of the goal · ${v}`;return(0,B.jsxs)(q,{open:a,onClose:n,maxWidth:`sm`,fullWidth:!0,children:[(0,B.jsxs)(Yt,{children:[(0,B.jsxs)(Xt,{children:[(0,B.jsxs)(Zt,{children:[(0,B.jsx)(Qt,{title:p.featureName,children:p.featureName}),(0,B.jsxs)($t,{sx:{backgroundColor:F(s,.14),color:s,border:`1px solid ${s}`},children:[(0,B.jsx)(Oe,{sx:{fontSize:12,color:`inherit`}}),Ie[p.type]]})]}),(0,B.jsxs)(en,{title:_,children:[`Flipped `,g,p.createdBy?` by ${p.createdBy}`:``]})]}),(0,B.jsx)(h,{"aria-label":`Close`,size:`small`,onClick:n,children:(0,B.jsx)(se,{fontSize:`small`})})]}),(0,B.jsxs)(tn,{children:[(0,B.jsxs)(nn,{children:[(0,B.jsxs)(rn,{children:[(0,B.jsxs)(J,{children:[(0,B.jsx)(Y,{children:`Before`}),(0,B.jsx)(an,{children:w(u.before)})]}),(0,B.jsx)(on,{children:`→`}),(0,B.jsxs)(J,{children:[(0,B.jsx)(Y,{children:`After`}),(0,B.jsx)(an,{children:w(u.after)})]})]}),(0,B.jsxs)(sn,{tone:d,children:[(0,B.jsxs)(cn,{children:[(0,B.jsx)(m,{sx:{fontSize:28}}),L(f)]}),(0,B.jsx)(ln,{children:`${dn(u.deltaAbs)} · ${y}`})]})]}),(0,B.jsx)(un,{children:c&&l?(0,B.jsx)(I.Suspense,{fallback:null,children:(0,B.jsx)(me,{data:c,overrideOptions:l,aspectRatio:3})}):null})]})]})},hn=4,gn={up:P,down:A,flat:N},_n=a(v)(({theme:e})=>({display:`flex`,flexDirection:`column`,gap:e.spacing(.75),flex:1})),vn=a(v)(({theme:e})=>({display:`flex`,alignItems:`center`,justifyContent:`space-between`,gap:e.spacing(1)})),yn=a(_)(({theme:e})=>({fontSize:e.fontSizes.smallerBody,fontWeight:e.typography.fontWeightBold,color:e.palette.text.secondary,textTransform:`uppercase`,letterSpacing:`0.06em`})),bn=a(_)(({theme:e})=>({fontSize:e.fontSizes.smallerBody,fontWeight:600,color:e.palette.text.secondary,cursor:`default`})),xn=a(v)(({theme:e})=>({display:`flex`,flexDirection:`column`,gap:e.spacing(.25)})),Sn=a(`button`)(({theme:e})=>({border:`none`,background:`none`,font:`inherit`,color:`inherit`,width:`100%`,textAlign:`left`,cursor:`pointer`,display:`grid`,gridTemplateColumns:`1fr auto`,alignItems:`center`,gap:e.spacing(1),padding:e.spacing(.5,0),borderRadius:e.shape.borderRadius,"&:hover":{backgroundColor:e.palette.action.hover},"&:focus-visible":{outline:`2px solid ${e.palette.primary.main}`,outlineOffset:-2}})),Cn=a(v)(({theme:e})=>({fontSize:e.typography.body2.fontSize,fontWeight:500,color:e.palette.text.primary,whiteSpace:`nowrap`,overflow:`hidden`,textOverflow:`ellipsis`,minWidth:0})),wn=a(`span`,{shouldForwardProp:e=>e!==`tone`})(({theme:e,tone:t})=>({display:`inline-flex`,alignItems:`center`,gap:2,fontSize:e.typography.body2.fontSize,fontWeight:700,fontVariantNumeric:`tabular-nums`,whiteSpace:`nowrap`,color:t===`up`?e.palette.success.main:t===`down`?e.palette.error.main:e.palette.text.secondary})),Tn=a(_)(({theme:e})=>({fontSize:e.fontSizes.smallerBody,color:e.palette.text.secondary,textAlign:`right`,paddingRight:e.spacing(.75)})),En=a(_)(({theme:e})=>({fontSize:e.fontSizes.smallerBody,color:e.palette.text.secondary,fontStyle:`italic`,flex:1,display:`flex`,alignItems:`center`,justifyContent:`center`,textAlign:`center`,minHeight:e.spacing(8)})),Dn=({impacts:e,timeRange:t,aggregationMode:n})=>{let[r,i]=(0,I.useState)(null),a=e.slice(0,hn),s=e.length-a.length,c=`±${K(U[t])}`;return(0,B.jsxs)(_n,{children:[(0,B.jsxs)(vn,{children:[(0,B.jsx)(yn,{children:`Top movers`}),(0,B.jsx)(o,{arrow:!0,placement:`top`,title:`Goal change in the ${c} window before vs. after each flag's most significant change`,children:(0,B.jsx)(bn,{children:c})})]}),a.length===0?(0,B.jsx)(En,{children:`No measurable flag changes in this window.`}):(0,B.jsxs)(xn,{children:[a.map(e=>{let t=gn[e.tone];return(0,B.jsxs)(Sn,{type:`button`,onClick:()=>i(e),"aria-label":`${e.featureName} ${L(e.deltaPct)}, view impact details`,children:[(0,B.jsx)(Cn,{title:e.featureName,children:e.featureName}),(0,B.jsxs)(wn,{tone:e.tone,children:[(0,B.jsx)(t,{sx:{fontSize:14}}),L(e.deltaPct)]})]},e.featureName)}),s>0?(0,B.jsxs)(Tn,{children:[`+`,s,` more`]}):null]}),(0,B.jsx)(mn,{impact:r,aggregationMode:n,onClose:()=>i(null)})]})},On=p((0,B.jsx)(`path`,{d:`m14.06 9.02.92.92L5.92 19H5v-.92zM17.66 3c-.25 0-.51.1-.7.29l-1.83 1.83 3.75 3.75 1.83-1.83c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.2-.2-.45-.29-.71-.29m-3.6 3.19L3 17.25V21h3.75L17.81 9.94z`}),`EditOutlined`),kn=p((0,B.jsx)(`path`,{d:`M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2m0 16H8V7h11z`}),`ContentCopyOutlined`),An=a(`div`)(({theme:e})=>({display:`flex`,alignItems:`center`,gap:e.spacing(2),borderBottom:`1px solid ${e.palette.divider}`})),jn=a(ve)({flex:1,minWidth:0,"& .MuiTabs-flexContainer":{gap:4}}),Mn=a(Se)(({theme:e})=>({textTransform:`none`,fontSize:e.fontSizes.smallBody,fontWeight:e.typography.fontWeightMedium,minHeight:e.spacing(5.5),padding:e.spacing(.5,1,.5,2),"& .tab-actions":{opacity:.4,marginLeft:e.spacing(.5)},"&:hover .tab-actions, &.Mui-selected .tab-actions":{opacity:1}})),Nn=a(v)({display:`flex`,alignItems:`center`,gap:4}),Pn=a(y)(({theme:e})=>({textTransform:`none`,whiteSpace:`nowrap`,flexShrink:0,marginLeft:e.spacing(1),marginBottom:e.spacing(.5)})),Fn=({views:e,activeViewId:t,onSelect:n,onCreate:r,onEdit:i,onDuplicate:a,onDelete:o})=>{let[s,u]=(0,I.useState)(null),[d,f]=(0,I.useState)(null),p=(e,t)=>{e.stopPropagation(),u(e.currentTarget),f(t)},m=()=>{u(null),f(null)},g=e.find(e=>e.id===d)??null;return(0,B.jsxs)(An,{children:[(0,B.jsx)(jn,{value:t??!1,onChange:(e,t)=>n(t),variant:`scrollable`,scrollButtons:`auto`,children:e.map(e=>(0,B.jsx)(Mn,{value:e.id,label:(0,B.jsxs)(Nn,{children:[(0,B.jsx)(`span`,{children:e.title}),(0,B.jsx)(h,{component:`span`,className:`tab-actions`,size:`medium`,"aria-label":`${e.title} actions`,onClick:t=>p(t,e.id),children:(0,B.jsx)(je,{})})]})},e.id))}),(0,B.jsx)(Pn,{variant:`outlined`,startIcon:(0,B.jsx)(j,{}),onClick:r,children:`New view`}),(0,B.jsxs)(c,{anchorEl:s,open:!!s,onClose:m,children:[(0,B.jsxs)(l,{onClick:()=>{g&&i(g),m()},children:[(0,B.jsx)(k,{children:(0,B.jsx)(On,{fontSize:`small`})}),(0,B.jsx)(T,{children:`Edit`})]}),(0,B.jsxs)(l,{onClick:()=>{g&&a(g),m()},children:[(0,B.jsx)(k,{children:(0,B.jsx)(kn,{fontSize:`small`})}),(0,B.jsx)(T,{children:`Duplicate`})]}),(0,B.jsxs)(l,{onClick:()=>{g&&o(g),m()},children:[(0,B.jsx)(k,{children:(0,B.jsx)(Ce,{fontSize:`small`})}),(0,B.jsx)(T,{children:`Delete`})]})]})]})},In=`50`,Ln=({option:e})=>(0,B.jsxs)(v,{sx:{display:`flex`,flexDirection:`column`},children:[(0,B.jsx)(_,{variant:`body2`,children:e.name}),e.project?(0,B.jsx)(_,{variant:`caption`,sx:{color:`text.secondary`},children:e.project}):null]}),Rn=({value:e,onChange:t,disabled:n})=>{let[r,i]=(0,I.useState)(``),[a,o]=(0,I.useState)(``),[c,l]=(0,I.useState)(!1),f=(0,I.useMemo)(()=>d(e=>{o(e)},250),[]),p=(0,I.useCallback)(({children:e,...t})=>(0,B.jsxs)(m,{...t,children:[(0,B.jsx)(b,{sx:{px:2,py:1},onMouseDown:e=>e.preventDefault(),control:(0,B.jsx)(Te,{size:`small`,checked:c,onChange:(e,t)=>l(t)}),label:(0,B.jsx)(_,{variant:`body2`,children:`Search archived features`})}),(0,B.jsx)(te,{}),e]}),[c]),{features:h,loading:g}=E({query:a||void 0,limit:In,archived:c?`IS:true`:void 0}),y=h.map(({name:e,project:t})=>({name:e,project:t}));return(0,B.jsx)(s,{multiple:!0,disableCloseOnSelect:!0,disabled:n,loading:g,options:y,value:e.map(e=>y.find(t=>t.name===e)??{name:e,project:``}),inputValue:r,slots:{paper:p},onInputChange:(e,t,n)=>{n===`input`&&(i(t),f(t))},onChange:(e,n)=>{t(n.map(e=>e.name))},isOptionEqualToValue:(e,t)=>e.name===t.name,getOptionLabel:e=>e.name,renderOption:(e,t)=>(0,I.createElement)(v,{component:`li`,...e,key:t.name},(0,B.jsx)(Ln,{option:t})),renderInput:t=>(0,B.jsx)(u,{...t,label:`Features to follow`,placeholder:e.length===0?`Search for features…`:`Add another feature…`,size:`small`,variant:`outlined`,helperText:`Toggle events for these features will be drawn over the chart.`})})},zn={hour:`Last hour`,day:`Last 24 hours`,week:`Last 7 days`,month:`Last 30 days`,threeMonths:`Last 3 months`,sixMonths:`Last 6 months`},Bn=Object.entries(zn).map(([e,t])=>({key:e,label:t})),X=`production`,Vn=`month`,Hn=`count`,Z=a(`div`)(({theme:e})=>({display:`flex`,flexDirection:`column`,gap:e.spacing(.5),flex:1,minWidth:220})),Un=a(_)(({theme:e})=>({fontSize:e.fontSizes.smallBody,fontWeight:e.typography.fontWeightBold,color:e.palette.text.primary})),Q=a(_)(({theme:e})=>({fontSize:e.fontSizes.smallerBody,color:e.palette.text.secondary})),Wn=a(`div`)(({theme:e})=>({display:`flex`,alignItems:`center`,gap:e.spacing(2),padding:e.spacing(2,2.5),borderRadius:e.shape.borderRadius,border:`1px solid ${e.palette.divider}`,backgroundColor:e.palette.background.elevation1})),Gn=a(`div`)(({theme:e})=>({flex:1,minWidth:0,display:`flex`,flexDirection:`column`,gap:e.spacing(.5)})),Kn=a(u)(({theme:e})=>({maxWidth:e.spacing(30)})),qn=a(_)(({theme:e})=>({fontSize:e.fontSizes.smallerBody,color:e.palette.text.secondary,overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`})),Jn=[{key:`count`,label:`Count`},{key:`rps`,label:`Rate per second`},{key:`sum`,label:`Sum`},{key:`avg`,label:`Average`},{key:`p50`,label:`50th percentile`},{key:`p95`,label:`95th percentile`},{key:`p99`,label:`99th percentile`}],Yn=(e,t)=>{let n=C(e.name);return{id:O(),metricName:e.name,displayName:e.displayName||e.name,aggregationMode:pe(n),labelSelectors:{},source:e.source,title:void 0,yAxisMin:`auto`,timeRange:t}},Xn=e=>({name:e.metricName,displayName:e.displayName,help:``,source:e.source===`external`?`external`:`internal`}),Zn=e=>{let t=C(e);return t===`unknown`?`Metric type could not be inferred.`:`${t.charAt(0).toUpperCase()}${t.slice(1)} metric`},Qn=({option:e})=>(0,B.jsxs)(v,{sx:{display:`flex`,flexDirection:`column`},children:[(0,B.jsx)(_,{variant:`body2`,children:e.displayName||e.name}),e.help?(0,B.jsx)(_,{variant:`caption`,sx:{color:`text.secondary`},children:e.help}):null]}),$n=({metric:e,onSelectGoal:t,onRename:n,onRemove:r})=>{let i=e.displayName||e.metricName;return(0,B.jsxs)(Wn,{children:[(0,B.jsx)(b,{sx:{mr:0},"aria-label":`Mark ${i} as the goal`,control:(0,B.jsx)(f,{size:`small`,checked:!!e.goal,onChange:()=>t(e.id)}),label:(0,B.jsx)(_,{variant:`caption`,sx:{color:`text.secondary`},children:`Goal`}),labelPlacement:`bottom`}),(0,B.jsxs)(Gn,{children:[(0,B.jsx)(Kn,{label:`Display name`,value:e.displayName??``,onChange:t=>n(e.id,t.target.value),placeholder:e.metricName,size:`small`,variant:`outlined`,fullWidth:!0}),(0,B.jsxs)(qn,{title:e.metricName,children:[e.metricName,` · `,Zn(e.metricName)]})]}),(0,B.jsx)(o,{title:`Remove metric`,arrow:!0,children:(0,B.jsx)(h,{size:`medium`,"aria-label":`Remove ${i}`,onClick:()=>r(e.id),children:(0,B.jsx)(ge,{})})})]})},er=e=>(e.find(e=>e.goal)??e[0])?.aggregationMode??Hn,tr=e=>e?{title:e.title,featureNames:e.featureNames,metrics:e.metrics,timeRange:e.timeRange,aggregationMode:er(e.metrics),environment:e.environment,showTopMovers:e.showTopMovers??!1}:{title:``,featureNames:[],metrics:[],timeRange:Vn,aggregationMode:Hn,environment:X,showTopMovers:!1},$=(e,t)=>e.map(e=>({...e,...t})),nr=(e,t)=>e.metrics.length===0&&t.length>0?pe(C(t[0].name)):e.aggregationMode,rr=(e,t)=>{let n=new Map(e.metrics.map(e=>[e.metricName,e]));return t.map(t=>n.get(t.name)??Yn(t,e.timeRange))},ir=(e,t)=>{switch(t.type){case`reset`:return t.form;case`setTitle`:return{...e,title:t.title};case`setFeatureNames`:return{...e,featureNames:t.featureNames};case`setEnvironment`:return{...e,environment:t.environment};case`setShowTopMovers`:return{...e,showTopMovers:t.showTopMovers};case`setTimeRange`:return{...e,timeRange:t.timeRange,metrics:$(e.metrics,{timeRange:t.timeRange})};case`setAggregation`:return{...e,aggregationMode:t.aggregationMode,metrics:$(e.metrics,{aggregationMode:t.aggregationMode})};case`setMetrics`:{let n=nr(e,t.options),r=rr(e,t.options);return{...e,aggregationMode:n,metrics:$(r,{aggregationMode:n})}}case`setGoal`:return{...e,metrics:e.metrics.map(e=>({...e,goal:e.id===t.id}))};case`renameMetric`:return{...e,metrics:e.metrics.map(e=>e.id===t.id?{...e,displayName:t.displayName}:e)};case`removeMetric`:return{...e,metrics:e.metrics.filter(e=>e.id!==t.id)}}},ar=({open:e,initialView:t,onClose:n,onSave:r})=>{let{metricOptions:i,loading:a}=ye(),{environments:o,loading:c}=oe(),[l,d]=(0,I.useReducer)(ir,t,tr);(0,I.useEffect)(()=>{e&&d({type:`reset`,form:tr(t)})},[e,t]);let f=l.metrics.map(e=>i.find(t=>t.name===e.metricName)??Xn(e)),p=o.length>0?o.map(e=>({key:e.name,label:e.name})):[{key:X,label:X}],m=l.title.trim().length>0&&l.metrics.length>0;return(0,B.jsx)(_e,{open:e,onClose:n,onClick:()=>{m&&r({title:l.title.trim(),featureNames:l.featureNames,metrics:l.metrics,timeRange:l.timeRange,environment:l.environment,showTopMovers:l.showTopMovers})},title:t?`Edit view`:`Create a new view`,primaryButtonText:t?`Save changes`:`Create view`,secondaryButtonText:`Cancel`,disabledPrimaryButton:!m,maxWidth:`md`,fullWidth:!0,children:(0,B.jsxs)(v,{sx:{display:`flex`,flexDirection:`column`,gap:3,pt:1},children:[(0,B.jsx)(u,{label:`View title`,value:l.title,onChange:e=>d({type:`setTitle`,title:e.target.value}),placeholder:`e.g. Checkout funnel`,size:`small`,autoFocus:!0,required:!0}),(0,B.jsxs)(Z,{children:[(0,B.jsx)(Un,{children:`Metrics`}),(0,B.jsx)(s,{multiple:!0,disableCloseOnSelect:!0,loading:a,options:i,value:f,onChange:(e,t)=>d({type:`setMetrics`,options:t}),isOptionEqualToValue:(e,t)=>e.name===t.name,getOptionLabel:e=>e.displayName||e.name,groupBy:e=>e.source===`external`?`External metrics`:`Internal metrics`,renderOption:(e,t)=>(0,I.createElement)(v,{component:`li`,...e,key:`${t.source}__${t.name}`},(0,B.jsx)(Qn,{option:t})),renderInput:e=>(0,B.jsx)(u,{...e,placeholder:l.metrics.length===0?`Pick one or more metrics…`:`Add another metric…`,size:`small`,variant:`outlined`})}),(0,B.jsx)(Q,{children:`All selected metrics are drawn together on a single chart.`}),l.metrics.length>0?(0,B.jsx)(v,{sx:{display:`flex`,flexDirection:`column`,gap:1,mt:.5},children:l.metrics.map(e=>(0,B.jsx)($n,{metric:e,onSelectGoal:e=>d({type:`setGoal`,id:e}),onRename:(e,t)=>d({type:`renameMetric`,id:e,displayName:t}),onRemove:e=>d({type:`removeMetric`,id:e})},e.id))}):null]}),(0,B.jsx)(Rn,{value:l.featureNames,onChange:e=>d({type:`setFeatureNames`,featureNames:e})}),(0,B.jsxs)(v,{sx:{display:`flex`,gap:2,flexWrap:`wrap`},children:[(0,B.jsxs)(Z,{children:[(0,B.jsx)(D,{id:`view-aggregation`,labelId:`view-aggregation-label`,label:`Aggregation`,value:l.aggregationMode,options:Jn,onChange:e=>d({type:`setAggregation`,aggregationMode:e})}),(0,B.jsx)(Q,{children:`Applied to all metrics in this view.`})]}),(0,B.jsx)(Z,{children:(0,B.jsx)(D,{id:`view-time-range`,labelId:`view-time-range-label`,label:`Time range`,value:l.timeRange,options:Bn,onChange:e=>d({type:`setTimeRange`,timeRange:e})})}),(0,B.jsxs)(Z,{children:[(0,B.jsx)(D,{id:`view-environment`,labelId:`view-environment-label`,label:`Environment`,value:l.environment,options:p,disabled:c,onChange:e=>d({type:`setEnvironment`,environment:e})}),(0,B.jsx)(Q,{children:`Toggle events from this environment are drawn over the chart.`})]})]}),(0,B.jsxs)(Z,{children:[(0,B.jsx)(b,{control:(0,B.jsx)(Me,{checked:l.showTopMovers,onChange:e=>d({type:`setShowTopMovers`,showTopMovers:e.target.checked})}),label:`Show top movers`}),(0,B.jsx)(Q,{children:`Ranks the flags whose toggle had the biggest effect on the goal metric, shown beside the chart.`})]})]})})},or=`https://docs.getunleash.io/reference/impact-metrics`,sr=a(v)(({theme:e})=>({display:`flex`,flexDirection:`column`,alignItems:`center`,padding:e.spacing(6,4)})),cr=a(v)(({theme:e})=>({marginBottom:e.spacing(3)})),lr=a(v)(({theme:e})=>({textAlign:`center`,maxWidth:520,marginBottom:e.spacing(3)})),ur=a(v)(({theme:e})=>({display:`flex`,gap:e.spacing(2),alignItems:`center`,marginBottom:e.spacing(4)})),dr=a(g)(({theme:e})=>({maxWidth:520,backgroundColor:e.palette.info.light,marginTop:e.spacing(4),color:e.palette.info.dark,"& .MuiAlert-icon":{color:e.palette.info.main}})),fr=({onCreate:e})=>(0,B.jsx)(de,{header:(0,B.jsx)(ue,{title:`Impact views`}),children:(0,B.jsxs)(sr,{children:[(0,B.jsx)(cr,{children:(0,B.jsx)(ze,{})}),(0,B.jsxs)(lr,{children:[(0,B.jsx)(_,{variant:`h3`,component:`h2`,sx:{mb:1.5},children:`Start telling a story with your metrics`}),(0,B.jsx)(_,{sx:{color:`text.secondary`},children:`A view combines the features you want to follow with the impact metrics that matter to you. Toggle events for each feature are drawn over the chart so you can see exactly when a rollout moved the needle.`})]}),(0,B.jsxs)(ur,{children:[(0,B.jsx)(y,{variant:`text`,href:or,target:`_blank`,rel:`noopener noreferrer`,children:`Read the docs`}),(0,B.jsx)(y,{variant:`contained`,startIcon:(0,B.jsx)(j,{}),onClick:e,children:`Create your first view`})]}),(0,B.jsxs)(dr,{severity:`info`,icon:(0,B.jsx)(Ae,{}),children:[(0,B.jsx)(`strong`,{children:`Tip:`}),` Views are stored locally in your browser — only you can see them in this iteration.`]})]})}),pr=new Set([`count`,`sum`]),mr=e=>{for(let[,t]of e)if(Number.isFinite(t))return t;return 0},hr=e=>{for(let t=e.length-1;t>=0;--t){let n=e[t][1];if(Number.isFinite(n))return n}return 0},gr=(e,t,n)=>{if(pr.has(t))return{current:n,mode:`cumulative`,deltaAbs:null,deltaPct:null};if(!e||e.data.length===0)return{current:0,mode:`latest`,deltaAbs:0,deltaPct:null};let r=hr(e.data),i=mr(e.data),a=r-i;return{current:r,mode:`latest`,deltaAbs:a,deltaPct:i===0?null:a/i*100}},_r=e=>{let t=e.join(`,`),{features:n,loading:r}=E({query:t,limit:`100`}),{features:i,loading:a}=E({query:t,limit:`100`,archived:`IS:true`});return{features:(0,I.useMemo)(()=>{let t=new Set(e),r=(e,n)=>e.filter(e=>t.has(e.name)).map(e=>({name:e.name,project:e.project,type:e.type,lifecycleStage:e.lifecycle?.stage??n}));return[...r(n,null),...r(i,`archived`)]},[n,i,e]),loading:r||a}},vr=`IS_ANY_OF:feature-environment-enabled,feature-environment-disabled`,yr=(e,t)=>{let{events:n,loading:r}=be({feature:`IS_ANY_OF:${e.join(`,`)}`,type:vr,environment:`IS:${t}`,limit:`1000`},{refreshInterval:3e4});return{featureEvents:(0,I.useMemo)(()=>n.map(e=>({id:e.id,timestamp:new Date(e.createdAt).getTime(),type:e.type,label:e.label??e.type,createdBy:e.createdBy,featureName:e.featureName??``,environment:t})),[n,t]),loading:r}},br=e=>{let{stepSeries:t,stepTotals:n,start:r,end:i,loading:a}=Re(e.metrics),{features:o,loading:s}=_r(e.featureNames),{featureEvents:c,loading:l}=yr(e.featureNames,e.environment),u=e.metrics.findIndex(e=>e.goal),d=u>=0?e.metrics[u]:void 0,f=u>=0?t[u]:void 0,p=d?gr(f,d.aggregationMode,n[u]?.value??0):void 0,m=d?Lt({events:c,goalSeries:f,aggregationMode:d.aggregationMode,visibleWindow:Ne(r,i),timeRange:e.timeRange}):[];return{goalSummary:p,goalSeries:f,goalLabel:d?.title||d?.displayName||e.title,flagImpacts:m,stepSeries:t,stepTotals:n,start:r,end:i,featureEvents:c,resolvedFeatures:o,loading:a||s||l}},xr=`impact-metric-views:list`,Sr=`impact-metric-views:active-id`,Cr=[],wr=()=>{let[e,t]=M(xr,Cr),[n,r]=M(Sr,``),i=e.some(e=>e.id===n),a=n&&i?n:e[0]?.id??null;return{views:e,activeView:e.find(e=>e.id===a)??null,activeViewId:a,setActiveViewId:(0,I.useCallback)(e=>{r(e??``)},[r]),addView:(0,I.useCallback)(e=>{let n=Date.now(),i={...e,id:O(),createdAt:n,updatedAt:n};return t(e=>[...e,i]),r(i.id),i},[t,r]),updateView:(0,I.useCallback)((e,n)=>{t(t=>t.map(t=>t.id===e?{...t,...n,updatedAt:Date.now()}:t))},[t]),deleteView:(0,I.useCallback)(e=>{t(t=>t.filter(t=>t.id!==e)),n===e&&r(``)},[t,n,r]),duplicateView:(0,I.useCallback)(n=>{let i=e.find(e=>e.id===n);if(!i)return null;let a=Date.now(),o={...i,id:O(),title:`${i.title} (copy)`,createdAt:a,updatedAt:a};return t(e=>[...e,o]),r(o.id),o},[e,t,r])}},Tr=({view:e})=>{let t=br(e),n=zn[e.timeRange],r=e.metrics.find(e=>e.goal)?.aggregationMode??`avg`;return(0,B.jsxs)(v,{sx:{display:`flex`,flexDirection:`column`,gap:3},children:[(0,B.jsx)(ht,{title:t.goalLabel,subtitle:`Goal · ${n}`,timeRange:e.timeRange,aggregationMode:e.metrics[0]?.aggregationMode,stepSeries:t.stepSeries,stepTotals:t.stepTotals,featureEvents:t.featureEvents,start:t.start,end:t.end,loading:t.loading,chartHeightSpacing:{base:48,lg:40,sm:32},totalsLabel:`Signals`,totalsHeaderSlot:t.goalSummary?(0,B.jsx)(et,{goalMetricLabel:t.goalLabel,summary:t.goalSummary,series:t.goalSeries,timeLabel:n}):null,totalsMiddleSlot:e.showTopMovers?(0,B.jsx)(Dn,{impacts:t.flagImpacts,timeRange:e.timeRange,aggregationMode:r}):void 0}),(0,B.jsx)(Ft,{features:t.resolvedFeatures})]})},Er=()=>{let{views:e,activeView:t,activeViewId:n,setActiveViewId:r,addView:i,updateView:a,deleteView:o,duplicateView:s}=wr(),[c,l]=(0,I.useState)({type:`closed`}),[u,d]=(0,I.useState)(null),f=()=>l({type:`create`}),p=e=>l({type:`edit`,view:e}),m=()=>l({type:`closed`});return(0,B.jsxs)(v,{sx:{pt:3,mt:-4},children:[e.length===0?(0,B.jsx)(fr,{onCreate:f}):(0,B.jsxs)(v,{sx:{display:`flex`,flexDirection:`column`,gap:3},children:[(0,B.jsx)(ue,{title:`Impact views`,actions:(0,B.jsx)(ke,{color:`info`,children:`Internal beta`})}),(0,B.jsx)(Fn,{views:e,activeViewId:n,onSelect:r,onCreate:f,onEdit:p,onDuplicate:e=>s(e.id),onDelete:d}),t?(0,B.jsx)(Tr,{view:t}):null]}),(0,B.jsx)(ar,{open:c.type!==`closed`,initialView:c.type===`edit`?c.view:null,onClose:m,onSave:e=>{c.type===`edit`?a(c.view.id,e):i(e),m()}}),(0,B.jsx)(_e,{open:u!==null,title:u?`Delete "${u.title}"?`:`Delete view?`,primaryButtonText:`Delete`,secondaryButtonText:`Cancel`,onClick:()=>{u&&o(u.id),d(null)},onClose:()=>d(null)})]})};export{Er as ImpactViewsPage};
|