@malloy-publisher/app 0.2.0 → 0.2.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/api-doc.yaml CHANGED
@@ -191,6 +191,10 @@ paths:
191
191
  Retrieves a list of all environments currently hosted on this Malloy Publisher server.
192
192
  Each environment contains metadata about its packages, connections, and configuration.
193
193
  This endpoint is typically used to discover available environments and their basic information.
194
+
195
+ This endpoint does not reload. A `reload` query parameter is rejected with 400 rather
196
+ than ignored, because answering 200 here reads as a reload that worked. Reload is
197
+ per-environment: use `GET /environments/{environmentName}?reload=true`.
194
198
  responses:
195
199
  "200":
196
200
  description: A list of all available environments
@@ -200,6 +204,8 @@ paths:
200
204
  type: array
201
205
  items:
202
206
  $ref: "#/components/schemas/Environment"
207
+ "400":
208
+ $ref: "#/components/responses/BadRequest"
203
209
  "401":
204
210
  $ref: "#/components/responses/Unauthorized"
205
211
  "500":
@@ -256,7 +262,13 @@ paths:
256
262
  $ref: "#/components/schemas/IdentifierPattern"
257
263
  - name: reload
258
264
  in: query
259
- description: Load / reload the environment before returning result
265
+ description: |
266
+ Load / reload the environment before returning result.
267
+
268
+ Only the two spellings OpenAPI serializes a boolean as are accepted:
269
+ `true` and `false`. Any other value (`1`, `yes`, `TRUE`, or the
270
+ parameter repeated) is refused with 400 rather than read as `false`,
271
+ which would answer 200 without recompiling.
260
272
  required: false
261
273
  schema:
262
274
  type: boolean
@@ -267,6 +279,8 @@ paths:
267
279
  application/json:
268
280
  schema:
269
281
  $ref: "#/components/schemas/Environment"
282
+ "400":
283
+ $ref: "#/components/responses/BadRequest"
270
284
  "401":
271
285
  $ref: "#/components/responses/Unauthorized"
272
286
  "404":
@@ -1286,6 +1300,10 @@ paths:
1286
1300
  Retrieves a list of all Malloy packages within the specified environment. Each package
1287
1301
  contains models, notebooks, databases, and other resources. This endpoint is useful
1288
1302
  for discovering available packages and their basic metadata.
1303
+
1304
+ This endpoint does not reload. A `reload` query parameter is rejected with 400 rather
1305
+ than ignored, because answering 200 here reads as a reload that worked. Reload is
1306
+ per-package: use `GET /environments/{environmentName}/packages/{packageName}?reload=true`.
1289
1307
  parameters:
1290
1308
  - name: environmentName
1291
1309
  in: path
@@ -1302,6 +1320,8 @@ paths:
1302
1320
  type: array
1303
1321
  items:
1304
1322
  $ref: "#/components/schemas/Package"
1323
+ "400":
1324
+ $ref: "#/components/responses/BadRequest"
1305
1325
  "401":
1306
1326
  $ref: "#/components/responses/Unauthorized"
1307
1327
  "500":
@@ -1382,7 +1402,13 @@ paths:
1382
1402
  $ref: "#/components/schemas/VersionIdPattern"
1383
1403
  - name: reload
1384
1404
  in: query
1385
- description: Load / reload the package before returning result
1405
+ description: |
1406
+ Load / reload the package before returning result.
1407
+
1408
+ Only the two spellings OpenAPI serializes a boolean as are accepted:
1409
+ `true` and `false`. Any other value (`1`, `yes`, `TRUE`, or the
1410
+ parameter repeated) is refused with 400 rather than read as `false`,
1411
+ which would answer 200 without recompiling.
1386
1412
  required: false
1387
1413
  schema:
1388
1414
  type: boolean
@@ -1393,6 +1419,8 @@ paths:
1393
1419
  application/json:
1394
1420
  schema:
1395
1421
  $ref: "#/components/schemas/Package"
1422
+ "400":
1423
+ $ref: "#/components/responses/BadRequest"
1396
1424
  "401":
1397
1425
  $ref: "#/components/responses/Unauthorized"
1398
1426
  "404":
@@ -1811,7 +1839,7 @@ paths:
1811
1839
  Retrieves everything a viewer needs to render one dashboard: the artifact
1812
1840
  tag's declarations plus the control contract derived from the givens its
1813
1841
  query references. Running the dashboard needs no further endpoint — its
1814
- query, each composite tile, and each control's suggest query all run
1842
+ query, each tile, and each control's suggest query all run
1815
1843
  through the model query endpoint with `givens`, using the manifest's
1816
1844
  `path` as the model.
1817
1845
  parameters:
@@ -2521,12 +2549,18 @@ paths:
2521
2549
  When true, also drop the physical tables recorded in the
2522
2550
  materialization's manifest before deleting the record. Defaults to
2523
2551
  false (record-only delete; the caller owns table GC).
2552
+
2553
+ Only `true` and `false` are accepted. Any other value is refused
2554
+ with 400 rather than read as `false`, which would delete the record,
2555
+ leave the tables on disk, and still answer 204.
2524
2556
  schema:
2525
2557
  type: boolean
2526
2558
  default: false
2527
2559
  responses:
2528
2560
  "204":
2529
2561
  description: Materialization deleted
2562
+ "400":
2563
+ $ref: "#/components/responses/BadRequest"
2530
2564
  "404":
2531
2565
  $ref: "#/components/responses/NotFound"
2532
2566
  "409":
@@ -2997,9 +3031,11 @@ components:
2997
3031
  description: >-
2998
3032
  Non-fatal findings collected when the package loaded, none of which
2999
3033
  stop the model compiling or the package loading. Render-tag
3000
- findings: a render annotation (e.g. `# big_value` or `# currency`)
3001
- misconfigured for the field it sits on, so it renders as
3002
- "[object Object]" or an inline error at query time. Materialization
3034
+ findings: a render annotation (e.g. `# big_value`, `# currency` or
3035
+ `# colspan`) the renderer cannot apply as written, either malformed
3036
+ for the field it sits on, so it renders as "[object Object]" or an
3037
+ inline error at query time, or inert where it sits and silently
3038
+ ignored. Materialization
3003
3039
  findings: a `storage=` source not served from storage, a `#@ persist`
3004
3040
  source that was not recognized as materializable, a persist-target
3005
3041
  collision, and materialization-config problems that degrade
@@ -3090,9 +3126,15 @@ components:
3090
3126
  - error
3091
3127
  - warn
3092
3128
  description: >-
3093
- Finding severity. Render findings are surfaced here only at
3094
- `error` severity; lower-severity render findings remain on the
3095
- query-time `renderLogs` surface. Materialization and dashboard
3129
+ Finding severity. Render-tag findings use both: `error` for
3130
+ a tag malformed for the field it sits on, which renders as
3131
+ "[object Object]" or an inline error at query time, and `warn`
3132
+ for one that is well-formed but inert where it sits and so is
3133
+ silently ignored (e.g. `# colspan` outside
3134
+ `# dashboard { columns=N }`), where nothing looks broken at
3135
+ query time and the layout simply is not what was written.
3136
+ Those are the only two severities the renderer emits, so no
3137
+ render finding is withheld. Materialization and dashboard
3096
3138
  findings use both: `error` for something that cannot work as
3097
3139
  written, such as a tile naming a view the source does not
3098
3140
  have, and `warn` for something that works but not as the
@@ -3476,7 +3518,7 @@ components:
3476
3518
  Everything a viewer needs to render one dashboard: the artifact tag's
3477
3519
  declarations plus the control contract derived from the givens its query
3478
3520
  references. Running needs no dashboard-specific endpoint — the query,
3479
- each composite tile, and each control's suggest query all run through
3521
+ each tile, and each control's suggest query all run through
3480
3522
  the ordinary model query endpoint with `givens`.
3481
3523
  properties:
3482
3524
  resource:
@@ -3513,24 +3555,29 @@ components:
3513
3555
  query:
3514
3556
  type: string
3515
3557
  description: >-
3516
- Name of the tagged query to run. Present for the single-query form
3517
- only; a composite dashboard carries `tiles` instead. A NAME rather
3518
- than an expression, so it goes in the `queryName` field of a
3519
- `POST …/models/{path}/query` body. A tile's `query` is the other
3520
- shape and is not interchangeable with this one; see
3521
- `DashboardTile.query`.
3558
+ Name of the tagged query whose single result IS the page. Set when the
3559
+ `# artifact` tag sits on a `query:`; a dashboard authored the ordinary
3560
+ way carries `tiles` instead and leaves this absent. A NAME rather than
3561
+ an expression, so it goes in the `queryName` field of a
3562
+ `POST …/models/{path}/query` body. A tile's `query` is the other shape
3563
+ and is not interchangeable with this one; see `DashboardTile.query`.
3522
3564
  tiles:
3523
3565
  type: array
3524
- description:
3525
- Tiles of a composite dashboard, run separately and combined into one
3526
- grid. Present for the composite form only.
3566
+ description: >-
3567
+ The dashboard's tiles, each run as its own query and combined into one
3568
+ grid. This is how a dashboard is normally authored, and the only form
3569
+ that can span sources. Absent when the `# artifact` tag sits on a
3570
+ `query:` instead, in which case `query` is set.
3527
3571
  items:
3528
3572
  $ref: "#/components/schemas/DashboardTile"
3529
3573
  dashboardColumns:
3530
3574
  type: integer
3531
- description:
3532
- Grid width from the `# dashboard {columns=N}` render tag, or
3533
- `dashboard_columns=N` on a composite artifact tag
3575
+ description: >-
3576
+ Grid width, from the `# dashboard {columns=N}` render tag beside the
3577
+ artifact tag. One spelling wherever the artifact tag sits: Publisher
3578
+ reads it at model level to lay out `tiles`, and `@malloydata/render`
3579
+ reads the same tag off a tagged `query:`. Absent means the viewer's
3580
+ default.
3534
3581
  startingGivens:
3535
3582
  allOf:
3536
3583
  - $ref: "#/components/schemas/EncodedGivenValues"
@@ -3546,9 +3593,9 @@ components:
3546
3593
  type: array
3547
3594
  description: |
3548
3595
  The control row. Normally one entry per given the dashboard runs
3549
- with, which is what its `query` references on the single-query form
3550
- and the union over `tiles` on a composite, and which the entry file
3551
- can bind. A composite widens it to
3596
+ with: the union over `tiles`, or what `query` references when the tag
3597
+ sits on a query, and which the entry file
3598
+ can bind. The row widens to
3552
3599
  every given the entry file surfaces when any tile is one discovery
3553
3600
  cannot resolve, because that tile's givens are otherwise absent from
3554
3601
  the row it filters by; see `DashboardTile.givenNames`. So an entry
@@ -3576,7 +3623,7 @@ components:
3576
3623
 
3577
3624
  DashboardTile:
3578
3625
  type: object
3579
- description: One tile of a composite dashboard
3626
+ description: One tile of a dashboard
3580
3627
  properties:
3581
3628
  query:
3582
3629
  type: string
@@ -3601,6 +3648,39 @@ components:
3601
3648
  widens `DashboardManifest.givens` to every given the entry file
3602
3649
  surfaces, rather than the union over the resolvable tiles, so that
3603
3650
  the row actually contains the givens that tile filters by.
3651
+ label:
3652
+ type: string
3653
+ description: >-
3654
+ Heading for the tile, from a `# label` on the view or query it names.
3655
+ Absent when it carries none, in which case a viewer derives one from
3656
+ the run expression.
3657
+ subtitle:
3658
+ type: string
3659
+ description:
3660
+ Second line under the heading, from a `# subtitle` on the view or
3661
+ query it names.
3662
+ colspan:
3663
+ type: integer
3664
+ description: >-
3665
+ Grid columns this tile spans, from a `# colspan=N` on the view or
3666
+ query it names. Clamped to `dashboardColumns` at render time. Absent
3667
+ means one column.
3668
+ break:
3669
+ type: boolean
3670
+ description: >-
3671
+ Start a new grid row at this tile, from a `# break` on the view or
3672
+ query it names. Named for the tag, so every per-tile field on this
3673
+ schema is spelled the way an author writes it. A generated client
3674
+ escapes the attribute where the word is reserved (the Python client
3675
+ exposes `break_`) while the wire key stays `break`.
3676
+ borderless:
3677
+ type: boolean
3678
+ description: >-
3679
+ Draw the result with no card around it, from a `# borderless` on the
3680
+ view or query it names. Together with `label`, `subtitle`, `colspan`
3681
+ and `break` this is the whole per-child tag set `@malloydata/render`
3682
+ resolves for a `# dashboard` nest child, read the same way here so one
3683
+ view presents identically as a tile and as a nest.
3604
3684
 
3605
3685
  DataApp:
3606
3686
  type: object
@@ -4268,14 +4348,66 @@ components:
4268
4348
  to degrade to the live warehouse. **The rows are correct and the
4269
4349
  request succeeded**, which is why this needs its own value: it is
4270
4350
  indistinguishable from a storage hit at the call site, and treating it
4271
- as one would report a healthy hit rate for a broken store.
4272
-
4273
- Null when the query never had a storage binding to consider — every
4274
- query on a deployment with no `storage=` sources, which is the default.
4275
-
4276
- A storage-served result is byte-identical to a live one by design, so
4277
- this field is the only way a caller can tell that materialization did
4278
- anything, or show a user which of their sources it applies to.
4351
+ as one would report a healthy hit rate for a broken store. This value
4352
+ is NOT the same event as the `live_fallback` label on
4353
+ `publisher_storage_serve_routing_total` see the warning below.
4354
+
4355
+ **This field describes the `storage=` tier and nothing else.** It
4356
+ records how the storage routing decision came out, so it says nothing
4357
+ about the colocated `#@ persist` tier, which answers a query by
4358
+ substituting the materialized table into the model and never reaches
4359
+ that decision.
4360
+
4361
+ **Null is three different outcomes**, and they are worth telling
4362
+ apart because two of them mean materialization worked and one means
4363
+ it silently did not:
4364
+
4365
+ 1. The query never had a storage binding to consider — every query on
4366
+ a deployment with no `storage=` sources, which is the default.
4367
+ 2. It was answered from a **colocated** materialized table. The
4368
+ query never reached the routing decision, so a fully materialized
4369
+ answer reports the same null a fully live one does.
4370
+ 3. The storage transform was **ineligible** for this query, so it was
4371
+ served live. The query DID reach the routing decision and the tier
4372
+ declined it — a storage-tier miss, reported identically to "no
4373
+ materialization exists anywhere."
4374
+
4375
+ Case 3 is the one that costs time, because nothing about the response
4376
+ distinguishes it from case 1. The server does log it: one
4377
+ `storage serve-shape ineligible for this query; serving live` line at
4378
+ INFO per routed query, carrying the compile error that made the shape
4379
+ ineligible, plus `shapeSources` (what the shape offered) and
4380
+ `staleSources` (bound, but withheld by the freshness gate). The
4381
+ compile error alone does not separate those: `Reference to undefined
4382
+ object 'x'` reads identically whether `x` carries no `#@ persist` at
4383
+ all or is materialized and merely past its freshness window. That log
4384
+ is currently the only per-query account of a storage-tier miss. It is not a hypothetical shape — a source
4385
+ warehouse that folds unquoted identifiers to upper case made every
4386
+ query on every `storage=` source in a package ineligible, and the
4387
+ whole tier reported null for months while looking exactly like a
4388
+ deployment that had never enabled it.
4389
+
4390
+ For the colocated tier there is no per-query signal at all. The
4391
+ package-grain fields are the nearest thing —
4392
+ `manifestBindingStatus`, `manifestEntryCount` and
4393
+ `storageServeBindings` — but read what each actually claims:
4394
+ `bound` reports that the bind ran to completion, explicitly NOT that
4395
+ any query routes to a materialized table, and `manifestEntryCount`
4396
+ counts colocated entries only, so a package whose sources are all
4397
+ `storage=` reports 0 while being fully bound.
4398
+
4399
+ ⚠️ **`live_fallback` names two different things across two surfaces,
4400
+ and correlating them on the token is wrong in both directions.** On
4401
+ this field it means the store failed at run time. On
4402
+ `publisher_storage_serve_routing_total{outcome}` it means the
4403
+ transform was ineligible — this field's null case 3 — and that
4404
+ metric spells the run-time failure `runtime_live_fallback`. So the
4405
+ field's `live_fallback` is the metric's `runtime_live_fallback`, and
4406
+ the metric's `live_fallback` is this field's `null`. A third surface,
4407
+ `manifestBindingStatus`, uses the same token for a third thing: a
4408
+ configured `manifestLocation` whose fetch or bind failed. Each
4409
+ surface is internally consistent; none of them means what the others
4410
+ do.
4279
4411
  executionTimeMs:
4280
4412
  type: integer
4281
4413
  description: >-
@@ -4668,25 +4800,62 @@ components:
4668
4800
  type: object
4669
4801
  description: AWS S3 connection configuration for DuckDB
4670
4802
  properties:
4803
+ # No schema `default:` here on purpose, though the reason is narrower than
4804
+ # it looks: at the pinned openapi-typescript (6.x) a defaulted property
4805
+ # still generates as optional, so a `default:` would be harmless today. It
4806
+ # is at 7.x that a default makes the property REQUIRED, which would force
4807
+ # every caller to name a provider. Omitted for robustness across that bump,
4808
+ # not to avoid a present-day break. Note `region` below carries a default
4809
+ # and so already has that exposure — a 7.x upgrade has to deal with it
4810
+ # either way. The default is stated in the description and applied when the
4811
+ # connection is attached.
4812
+ provider:
4813
+ type: string
4814
+ enum:
4815
+ - config
4816
+ - credential_chain
4817
+ description: >-
4818
+ How credentials are obtained; defaults to `config` when omitted.
4819
+ `config` uses the accessKeyId and secretAccessKey on this object,
4820
+ which are then required.
4821
+ `credential_chain` resolves them from the host instead — an instance
4822
+ profile, a web-identity token, or the environment — so no key is
4823
+ stored, and supplying one is rejected. Chain resolution happens when
4824
+ the connection is attached, so a host that cannot supply credentials
4825
+ fails there rather than on first object access.
4826
+ chain:
4827
+ type: string
4828
+ description: >-
4829
+ Ordered list of credential providers to try, semicolon-separated,
4830
+ for `provider: credential_chain` (DuckDB's CHAIN). Recognized
4831
+ providers are env, config, sts, instance, sso, process, and
4832
+ web_identity. Omit to use Publisher's default order, which covers
4833
+ the environment, a web-identity token, and an instance profile.
4834
+ Rejected under `provider: config`, where the key pair beside it
4835
+ is what grants access.
4671
4836
  accessKeyId:
4672
4837
  type: string
4673
- description: AWS access key ID
4838
+ description: "AWS access key ID (required for `provider: config`)"
4674
4839
  secretAccessKey:
4675
4840
  type: string
4676
- description: AWS secret access key
4841
+ description: "AWS secret access key (required for `provider: config`)"
4677
4842
  region:
4678
4843
  type: string
4679
- description: AWS region (e.g., us-east-1)
4680
- default: us-east-1
4844
+ description: >-
4845
+ AWS region (e.g., us-east-1). Optional, and Publisher falls back to
4846
+ us-east-1 when it is absent — but the fallback is applied in code, not
4847
+ by this schema: a `default:` here would be documentation only, since
4848
+ the generated clients leave an omitted property undefined rather than
4849
+ filling it. Stated this way so a caller reading the schema does not
4850
+ conclude the wire supplies it. A remote root in another region MUST
4851
+ set this; omitting it reaches us-east-1 and fails as a missing bucket
4852
+ rather than as a misconfiguration.
4681
4853
  endpoint:
4682
4854
  type: string
4683
4855
  description: Custom S3-compatible endpoint URL (optional, for MinIO, etc.)
4684
4856
  sessionToken:
4685
4857
  type: string
4686
4858
  description: AWS session token for temporary credentials (optional)
4687
- required:
4688
- - accessKeyId
4689
- - secretAccessKey
4690
4859
 
4691
4860
  AzureConnection:
4692
4861
  type: object
@@ -5381,7 +5550,11 @@ components:
5381
5550
  properties:
5382
5551
  graphs:
5383
5552
  type: array
5384
- description: Dependency-ordered build graphs, one per connection.
5553
+ description: >-
5554
+ Dependency-ordered build graphs. One per connection per model, not one
5555
+ per connection: a model contributes a graph for each connection its ROOT
5556
+ persist sources use, and a package's plan concatenates every model's, so
5557
+ the same source appears in the graph of every model that imports it.
5385
5558
  items:
5386
5559
  $ref: "#/components/schemas/BuildGraph"
5387
5560
  sources:
@@ -1 +1 @@
1
- import{C as r,J as t,j as e,a3 as i,ad as o}from"./index-B8pnU_V_.js";function m(){const s=r(),{environmentName:n}=t();if(n){const a=i({environmentName:n});return e.jsx(o,{onSelectPackage:s,resourceUri:a})}else return e.jsx("div",{children:e.jsx("h2",{children:"Missing environment name"})})}export{m as default};
1
+ import{T as r,J as t,j as e,a3 as i,ad as o}from"./index-O-tznXBH.js";function m(){const s=r(),{environmentName:n}=t();if(n){const a=i({environmentName:n});return e.jsx(o,{onSelectPackage:s,resourceUri:a})}else return e.jsx("div",{children:e.jsx("h2",{children:"Missing environment name"})})}export{m as default};
@@ -1 +1 @@
1
- import{C as t,j as o,g as a}from"./index-B8pnU_V_.js";function s(){const n=t();return o.jsx(a,{onClickEnvironment:n})}export{s as default};
1
+ import{T as t,j as o,C as a}from"./index-O-tznXBH.js";function s(){const n=t();return o.jsx(a,{onClickEnvironment:n})}export{s as default};
@@ -1 +1 @@
1
- import{c,j as s}from"./index-B8pnU_V_.js";const t=c(s.jsx("path",{d:"M12 3c-4.97 0-9 4.03-9 9s4.03 9 9 9 9-4.03 9-9c0-.46-.04-.92-.1-1.36-.98 1.37-2.58 2.26-4.4 2.26-2.98 0-5.4-2.42-5.4-5.4 0-1.81.89-3.42 2.26-4.4-.44-.06-.9-.1-1.36-.1"})),a=c(s.jsx("path",{d:"M12 7c-2.76 0-5 2.24-5 5s2.24 5 5 5 5-2.24 5-5-2.24-5-5-5M2 13h2c.55 0 1-.45 1-1s-.45-1-1-1H2c-.55 0-1 .45-1 1s.45 1 1 1m18 0h2c.55 0 1-.45 1-1s-.45-1-1-1h-2c-.55 0-1 .45-1 1s.45 1 1 1M11 2v2c0 .55.45 1 1 1s1-.45 1-1V2c0-.55-.45-1-1-1s-1 .45-1 1m0 18v2c0 .55.45 1 1 1s1-.45 1-1v-2c0-.55-.45-1-1-1s-1 .45-1 1M5.99 4.58c-.39-.39-1.03-.39-1.41 0-.39.39-.39 1.03 0 1.41l1.06 1.06c.39.39 1.03.39 1.41 0s.39-1.03 0-1.41zm12.37 12.37c-.39-.39-1.03-.39-1.41 0-.39.39-.39 1.03 0 1.41l1.06 1.06c.39.39 1.03.39 1.41 0 .39-.39.39-1.03 0-1.41zm1.06-10.96c.39-.39.39-1.03 0-1.41-.39-.39-1.03-.39-1.41 0l-1.06 1.06c-.39.39-.39 1.03 0 1.41s1.03.39 1.41 0zM7.05 18.36c.39-.39.39-1.03 0-1.41-.39-.39-1.03-.39-1.41 0l-1.06 1.06c-.39.39-.39 1.03 0 1.41s1.03.39 1.41 0z"}));export{t as D,a as L};
1
+ import{c,j as s}from"./index-O-tznXBH.js";const t=c(s.jsx("path",{d:"M12 3c-4.97 0-9 4.03-9 9s4.03 9 9 9 9-4.03 9-9c0-.46-.04-.92-.1-1.36-.98 1.37-2.58 2.26-4.4 2.26-2.98 0-5.4-2.42-5.4-5.4 0-1.81.89-3.42 2.26-4.4-.44-.06-.9-.1-1.36-.1"})),a=c(s.jsx("path",{d:"M12 7c-2.76 0-5 2.24-5 5s2.24 5 5 5 5-2.24 5-5-2.24-5-5-5M2 13h2c.55 0 1-.45 1-1s-.45-1-1-1H2c-.55 0-1 .45-1 1s.45 1 1 1m18 0h2c.55 0 1-.45 1-1s-.45-1-1-1h-2c-.55 0-1 .45-1 1s.45 1 1 1M11 2v2c0 .55.45 1 1 1s1-.45 1-1V2c0-.55-.45-1-1-1s-1 .45-1 1m0 18v2c0 .55.45 1 1 1s1-.45 1-1v-2c0-.55-.45-1-1-1s-1 .45-1 1M5.99 4.58c-.39-.39-1.03-.39-1.41 0-.39.39-.39 1.03 0 1.41l1.06 1.06c.39.39 1.03.39 1.41 0s.39-1.03 0-1.41zm12.37 12.37c-.39-.39-1.03-.39-1.41 0-.39.39-.39 1.03 0 1.41l1.06 1.06c.39.39 1.03.39 1.41 0 .39-.39.39-1.03 0-1.41zm1.06-10.96c.39-.39.39-1.03 0-1.41-.39-.39-1.03-.39-1.41 0l-1.06 1.06c-.39.39-.39 1.03 0 1.41s1.03.39 1.41 0zM7.05 18.36c.39-.39.39-1.03 0-1.41-.39-.39-1.03-.39-1.41 0l-1.06 1.06c-.39.39-.39 1.03 0 1.41s1.03.39 1.41 0z"}));export{t as D,a as L};
@@ -1,2 +1,2 @@
1
- import{u as Pe,a as Ee,r as u,R as Ce,b as Ie,c as S,j as t,s as M,B as Me,m as J,e as oe,d as le,f as ce,h as de,i as ze,k as O,l as pe,T as U,n as Z,o as Te,p as De,q as Re,t as ue,v as Be,w as se,x as Le,y as He,z as $e,A,D as $,M as Ne,P as Ae,E as We,F as Oe,S as Ve,G as Ue,H as F,I as V,J as he,C as q,K as f,L as Fe,N as xe,O as Q,Q as Qe,U as Xe,V as ae,W as fe,X as me,Y as ge,Z as Ye,_ as _e,$ as Ke}from"./index-B8pnU_V_.js";import{D as Ge,L as Je}from"./LightMode-BEyvNUzT.js";function Ze(e,r,n,o,s){const[a,i]=u.useState(()=>s&&n?n(e).matches:o?o(e).matches:r);return Ie(()=>{if(!n)return;const c=n(e),h=()=>{i(c.matches)};return h(),c.addEventListener("change",h),()=>{c.removeEventListener("change",h)}},[e,n]),a}const qe={...Ce},ye=qe.useSyncExternalStore;function et(e,r,n,o,s){const a=u.useCallback(()=>r,[r]),i=u.useMemo(()=>{if(s&&n)return()=>n(e).matches;if(o!==null){const{matches:p}=o(e);return()=>p}return a},[a,e,o,s,n]),[c,h]=u.useMemo(()=>{if(n===null)return[a,()=>()=>{}];const p=n(e);return[()=>p.matches,m=>(p.addEventListener("change",m),()=>{p.removeEventListener("change",m)})]},[a,n,e]);return ye(h,c,i)}function be(e={}){const{themeId:r}=e;return function(o,s={}){let a=Pe();a&&r&&(a=a[r]||a);const i=typeof window<"u"&&typeof window.matchMedia<"u",{defaultMatches:c=!1,matchMedia:h=i?window.matchMedia:null,ssrMatchMedia:x=null,noSsr:p=!1}=Ee({name:"MuiUseMediaQuery",props:s,theme:a});let m=typeof o=="function"?o(a):o;return m=m.replace(/^@media( ?)/m,""),m.includes("print")&&console.warn(["MUI: You have provided a `print` query to the `useMediaQuery` hook.","Using the print media query to modify print styles can lead to unexpected results.","Consider using the `displayPrint` field in the `sx` prop instead.","More information about `displayPrint` on our docs: https://mui.com/system/display/#display-in-print."].join(`
1
+ import{u as Pe,g as Ee,r as u,R as Ce,a as Ie,c as S,j as t,s as M,B as Me,m as J,e as oe,b as le,d as ce,f as de,h as ze,i as O,k as pe,l as U,n as Z,o as Te,p as De,q as Re,t as ue,v as Be,w as se,x as Le,y as He,z as $e,A,D as $,M as Ne,P as Ae,E as We,F as Oe,S as Ve,G as Ue,H as F,I as V,J as he,T as q,K as f,L as Fe,N as xe,O as Q,Q as Qe,U as Xe,V as ae,W as fe,X as me,Y as ge,Z as Ye,_ as _e,$ as Ke}from"./index-O-tznXBH.js";import{D as Ge,L as Je}from"./LightMode-DwFiroPa.js";function Ze(e,r,n,o,s){const[a,i]=u.useState(()=>s&&n?n(e).matches:o?o(e).matches:r);return Ie(()=>{if(!n)return;const c=n(e),h=()=>{i(c.matches)};return h(),c.addEventListener("change",h),()=>{c.removeEventListener("change",h)}},[e,n]),a}const qe={...Ce},ye=qe.useSyncExternalStore;function et(e,r,n,o,s){const a=u.useCallback(()=>r,[r]),i=u.useMemo(()=>{if(s&&n)return()=>n(e).matches;if(o!==null){const{matches:p}=o(e);return()=>p}return a},[a,e,o,s,n]),[c,h]=u.useMemo(()=>{if(n===null)return[a,()=>()=>{}];const p=n(e);return[()=>p.matches,m=>(p.addEventListener("change",m),()=>{p.removeEventListener("change",m)})]},[a,n,e]);return ye(h,c,i)}function be(e={}){const{themeId:r}=e;return function(o,s={}){let a=Pe();a&&r&&(a=a[r]||a);const i=typeof window<"u"&&typeof window.matchMedia<"u",{defaultMatches:c=!1,matchMedia:h=i?window.matchMedia:null,ssrMatchMedia:x=null,noSsr:p=!1}=Ee({name:"MuiUseMediaQuery",props:s,theme:a});let m=typeof o=="function"?o(a):o;return m=m.replace(/^@media( ?)/m,""),m.includes("print")&&console.warn(["MUI: You have provided a `print` query to the `useMediaQuery` hook.","Using the print media query to modify print styles can lead to unexpected results.","Consider using the `displayPrint` field in the `sx` prop instead.","More information about `displayPrint` on our docs: https://mui.com/system/display/#display-in-print."].join(`
2
2
  `)),(ye!==void 0?et:Ze)(m,c,h,x,p)}}be();const tt=S(t.jsx("path",{d:"M6 10c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm12 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm-6 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"})),rt=M(Me,{name:"MuiBreadcrumbCollapsed"})(J(({theme:e})=>({display:"flex",marginLeft:`calc(${e.spacing(1)} * 0.5)`,marginRight:`calc(${e.spacing(1)} * 0.5)`,...e.palette.mode==="light"?{backgroundColor:e.palette.grey[100],color:e.palette.grey[700]}:{backgroundColor:e.palette.grey[700],color:e.palette.grey[100]},borderRadius:2,"&:hover, &:focus":{...e.palette.mode==="light"?{backgroundColor:e.palette.grey[200]}:{backgroundColor:e.palette.grey[600]}},"&:active":{boxShadow:e.shadows[0],...e.palette.mode==="light"?{backgroundColor:oe(e.palette.grey[200],.12)}:{backgroundColor:oe(e.palette.grey[600],.12)}}}))),nt=M(tt)({width:24,height:16});function ot(e){const{slots:r={},slotProps:n={},...o}=e,s=e;return t.jsx("li",{children:t.jsx(rt,{focusRipple:!0,...o,ownerState:s,children:t.jsx(nt,{as:r.CollapsedIcon,ownerState:s,...n.collapsedIcon})})})}function st(e){return ce("MuiBreadcrumbs",e)}const at=le("MuiBreadcrumbs",["root","ol","li","separator"]),it=e=>{const{classes:r}=e;return pe({root:["root"],li:["li"],ol:["ol"],separator:["separator"]},st,r)},lt=M(U,{name:"MuiBreadcrumbs",slot:"Root",overridesResolver:(e,r)=>[{[`& .${at.li}`]:r.li},r.root]})({}),ct=M("ol",{name:"MuiBreadcrumbs",slot:"Ol"})({display:"flex",flexWrap:"wrap",alignItems:"center",padding:0,margin:0,listStyle:"none"}),dt=M("li",{name:"MuiBreadcrumbs",slot:"Separator"})({display:"flex",userSelect:"none",marginLeft:8,marginRight:8});function pt(e,r,n,o){return e.reduce((s,a,i)=>(i<e.length-1?s=s.concat(a,t.jsx(dt,{"aria-hidden":!0,className:r,ownerState:o,children:n},`separator-${i}`)):s.push(a),s),[])}const ut=u.forwardRef(function(r,n){const o=de({props:r,name:"MuiBreadcrumbs"}),{children:s,className:a,component:i="nav",slots:c={},slotProps:h={},expandText:x="Show path",itemsAfterCollapse:p=1,itemsBeforeCollapse:m=1,maxItems:y=8,separator:P="/",...H}=o,[z,E]=u.useState(!1),v={...o,component:i,expanded:z,expandText:x,itemsAfterCollapse:p,itemsBeforeCollapse:m,maxItems:y,separator:P},C=it(v),T=ze({elementType:c.CollapsedIcon,externalSlotProps:h.collapsedIcon,ownerState:v}),j=u.useRef(null),k=d=>{const w=()=>{E(!0);const b=j.current.querySelector("a[href],button,[tabindex]");b&&b.focus()};return m+p>=d.length?d:[...d.slice(0,m),t.jsx(ot,{"aria-label":x,slots:{CollapsedIcon:c.CollapsedIcon},slotProps:{collapsedIcon:T},onClick:w},"ellipsis"),...d.slice(d.length-p,d.length)]},D=u.Children.toArray(s).filter(d=>u.isValidElement(d)).map((d,w)=>t.jsx("li",{className:C.li,children:d},`child-${w}`));return t.jsx(lt,{ref:n,component:i,color:"textSecondary",className:O(C.root,a),ownerState:v,...H,children:t.jsx(ct,{className:C.ol,ref:j,ownerState:v,children:pt(z||y&&D.length<=y?D:k(D),C.separator,P,v)})})});function ht(e,r,n){const o=r.getBoundingClientRect(),s=n&&n.getBoundingClientRect(),a=ue(r);let i;if(r.fakeTransform)i=r.fakeTransform;else{const x=a.getComputedStyle(r);i=x.getPropertyValue("-webkit-transform")||x.getPropertyValue("transform")}let c=0,h=0;if(i&&i!=="none"&&typeof i=="string"){const x=i.split("(")[1].split(")")[0].split(",");c=parseInt(x[4],10),h=parseInt(x[5],10)}return e==="left"?s?`translateX(${s.right+c-o.left}px)`:`translateX(${a.innerWidth+c-o.left}px)`:e==="right"?s?`translateX(-${o.right-s.left-c}px)`:`translateX(-${o.left+o.width-c}px)`:e==="up"?s?`translateY(${s.bottom+h-o.top}px)`:`translateY(${a.innerHeight+h-o.top}px)`:s?`translateY(-${o.top-s.top+o.height-h}px)`:`translateY(-${o.top+o.height-h}px)`}function xt(e){return typeof e=="function"?e():e}function W(e,r,n){const o=xt(n),s=ht(e,r,o);s&&(r.style.webkitTransform=s,r.style.transform=s)}const ft=u.forwardRef(function(r,n){const o=Z(),s={enter:o.transitions.easing.easeOut,exit:o.transitions.easing.sharp},a={enter:o.transitions.duration.enteringScreen,exit:o.transitions.duration.leavingScreen},{addEndListener:i,appear:c=!0,children:h,container:x,direction:p="down",easing:m=s,in:y,onEnter:P,onEntered:H,onEntering:z,onExit:E,onExited:v,onExiting:C,style:T,timeout:j=a,TransitionComponent:k=Te,...D}=r,d=u.useRef(null),w=De(Re(h),d,n),b=l=>g=>{l&&(g===void 0?l(d.current):l(d.current,g))},X=b((l,g)=>{W(p,l,x),Le(l),P&&P(l,g)}),te=b((l,g)=>{const L=se({timeout:j,style:T,easing:m},{mode:"enter"});l.style.webkitTransition=o.transitions.create("-webkit-transform",{...L}),l.style.transition=o.transitions.create("transform",{...L}),l.style.webkitTransform="none",l.style.transform="none",z&&z(l,g)}),R=b(H),B=b(C),I=b(l=>{const g=se({timeout:j,style:T,easing:m},{mode:"exit"});l.style.webkitTransition=o.transitions.create("-webkit-transform",g),l.style.transition=o.transitions.create("transform",g),W(p,l,x),E&&E(l)}),Y=b(l=>{l.style.webkitTransition="",l.style.transition="",v&&v(l)}),_=l=>{i&&i(d.current,l)},N=u.useCallback(()=>{d.current&&W(p,d.current,x)},[p,x]);return u.useEffect(()=>{if(y||p==="down"||p==="right")return;const l=Be(()=>{d.current&&W(p,d.current,x)}),g=ue(d.current);return g.addEventListener("resize",l),()=>{l.clear(),g.removeEventListener("resize",l)}},[p,y,x]),u.useEffect(()=>{y||N()},[y,N]),t.jsx(k,{nodeRef:d,onEnter:X,onEntered:R,onEntering:te,onExit:I,onExited:Y,onExiting:B,addEndListener:_,appear:c,in:y,timeout:j,...D,children:(l,{ownerState:g,...L})=>u.cloneElement(h,{ref:w,style:{visibility:l==="exited"&&!y?"hidden":void 0,...T,...h.props.style},...L})})});function mt(e){return ce("MuiDrawer",e)}le("MuiDrawer",["root","docked","paper","anchorLeft","anchorRight","anchorTop","anchorBottom","paperAnchorLeft","paperAnchorRight","paperAnchorTop","paperAnchorBottom","paperAnchorDockedLeft","paperAnchorDockedRight","paperAnchorDockedTop","paperAnchorDockedBottom","modal"]);const ve=(e,r)=>{const{ownerState:n}=e;return[r.root,(n.variant==="permanent"||n.variant==="persistent")&&r.docked,r.modal]},gt=e=>{const{classes:r,anchor:n,variant:o}=e,s={root:["root",`anchor${$(n)}`],docked:[(o==="permanent"||o==="persistent")&&"docked"],modal:["modal"],paper:["paper",`paperAnchor${$(n)}`,o!=="temporary"&&`paperAnchorDocked${$(n)}`]};return pe(s,mt,r)},yt=M(Ne,{name:"MuiDrawer",slot:"Root",overridesResolver:ve})(J(({theme:e})=>({zIndex:(e.vars||e).zIndex.drawer}))),bt=M("div",{shouldForwardProp:We,name:"MuiDrawer",slot:"Docked",skipVariantsResolver:!1,overridesResolver:ve})({flex:"0 0 auto"}),vt=M(Ae,{name:"MuiDrawer",slot:"Paper",overridesResolver:(e,r)=>{const{ownerState:n}=e;return[r.paper,r[`paperAnchor${$(n.anchor)}`],n.variant!=="temporary"&&r[`paperAnchorDocked${$(n.anchor)}`]]}})(J(({theme:e})=>({overflowY:"auto",display:"flex",flexDirection:"column",height:"100%",flex:"1 0 auto",zIndex:(e.vars||e).zIndex.drawer,WebkitOverflowScrolling:"touch",position:"fixed",top:0,outline:0,variants:[{props:{anchor:"left"},style:{left:0}},{props:{anchor:"top"},style:{top:0,left:0,right:0,height:"auto",maxHeight:"100%"}},{props:{anchor:"right"},style:{right:0}},{props:{anchor:"bottom"},style:{top:"auto",left:0,bottom:0,right:0,height:"auto",maxHeight:"100%"}},{props:({ownerState:r})=>r.anchor==="left"&&r.variant!=="temporary",style:{borderRight:`1px solid ${(e.vars||e).palette.divider}`}},{props:({ownerState:r})=>r.anchor==="top"&&r.variant!=="temporary",style:{borderBottom:`1px solid ${(e.vars||e).palette.divider}`}},{props:({ownerState:r})=>r.anchor==="right"&&r.variant!=="temporary",style:{borderLeft:`1px solid ${(e.vars||e).palette.divider}`}},{props:({ownerState:r})=>r.anchor==="bottom"&&r.variant!=="temporary",style:{borderTop:`1px solid ${(e.vars||e).palette.divider}`}}]}))),je={left:"right",right:"left",top:"down",bottom:"up"};function jt(e){return["left","right"].includes(e)}function kt({direction:e},r){return e==="rtl"&&jt(r)?je[r]:r}const wt=u.forwardRef(function(r,n){const o=de({props:r,name:"MuiDrawer"}),s=Z(),a=He(),i={enter:s.transitions.duration.enteringScreen,exit:s.transitions.duration.leavingScreen},{anchor:c="left",BackdropProps:h,children:x,className:p,elevation:m=16,hideBackdrop:y=!1,ModalProps:{BackdropProps:P,...H}={},onClose:z,open:E=!1,PaperProps:v={},SlideProps:C,TransitionComponent:T,transitionDuration:j=i,variant:k="temporary",slots:D={},slotProps:d={},...w}=o,b=u.useRef(!1);u.useEffect(()=>{b.current=!0},[]);const X=kt({direction:a?"rtl":"ltr"},c),R={...o,anchor:c,elevation:m,open:E,variant:k,...w},B=gt(R),I={slots:{transition:T,...D},slotProps:{paper:v,transition:C,...d,backdrop:$e(d.backdrop||{...h,...P},{transitionDuration:j})}},[Y,_]=A("root",{ref:n,elementType:yt,className:O(B.root,B.modal,p),shouldForwardComponentProp:!0,ownerState:R,externalForwardedProps:{...I,...w,...H},additionalProps:{open:E,onClose:z,hideBackdrop:y,slots:{backdrop:I.slots.backdrop},slotProps:{backdrop:I.slotProps.backdrop}}}),[N,l]=A("paper",{elementType:vt,shouldForwardComponentProp:!0,className:O(B.paper,v.className),ownerState:R,externalForwardedProps:I,additionalProps:{elevation:k==="temporary"?m:0,square:!0,...k==="temporary"&&{role:"dialog","aria-modal":"true"}}}),[g,L]=A("docked",{elementType:bt,ref:n,className:O(B.root,B.docked,p),ownerState:R,externalForwardedProps:I,additionalProps:w}),[we,Se]=A("transition",{elementType:ft,ownerState:R,externalForwardedProps:I,additionalProps:{in:E,direction:je[X],timeout:j,appear:b.current}}),re=t.jsx(N,{...l,children:x});if(k==="permanent")return t.jsx(g,{...L,children:re});const ne=t.jsx(we,{...Se,children:re});return k==="persistent"?t.jsx(g,{...L,children:ne}):t.jsx(Y,{..._,children:ne})}),St=be({themeId:Oe}),Pt=S([t.jsx("path",{d:"M19 5v14H5V5zm0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2"},"0"),t.jsx("path",{d:"M14 17H7v-2h7zm3-4H7v-2h10zm0-4H7V7h10z"},"1")]),Et=S(t.jsx("path",{d:"M10.85 12.65h2.3L12 9zM20 8.69V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12zM14.3 16l-.7-2h-3.2l-.7 2H7.8L11 7h2l3.2 9z"})),Ct=S(t.jsx("path",{d:"M10 6 8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"})),It=S(t.jsx("path",{d:"M9.4 16.6 4.8 12l4.6-4.6L8 6l-6 6 6 6zm5.2 0 4.6-4.6-4.6-4.6L16 6l6 6-6 6z"})),Mt=S(t.jsx("path",{d:"m9.17 6 2 2H20v10H4V6zM10 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8z"})),zt=S(t.jsx("path",{d:"m12 5.69 5 4.5V18h-2v-6H9v6H7v-7.81zM12 3 2 12h3v8h6v-6h2v6h6v-8h3z"})),Tt=S(t.jsx("path",{d:"M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3z"})),Dt=S([t.jsx("path",{d:"M12 22C6.49 22 2 17.51 2 12S6.49 2 12 2s10 4.04 10 9c0 3.31-2.69 6-6 6h-1.77c-.28 0-.5.22-.5.5 0 .12.05.23.13.33.41.47.64 1.06.64 1.67 0 1.38-1.12 2.5-2.5 2.5m0-18c-4.41 0-8 3.59-8 8s3.59 8 8 8c.28 0 .5-.22.5-.5 0-.16-.08-.28-.14-.35-.41-.46-.63-1.05-.63-1.65 0-1.38 1.12-2.5 2.5-2.5H16c2.21 0 4-1.79 4-4 0-3.86-3.59-7-8-7"},"0"),t.jsx("circle",{cx:"6.5",cy:"11.5",r:"1.5"},"1"),t.jsx("circle",{cx:"9.5",cy:"7.5",r:"1.5"},"2"),t.jsx("circle",{cx:"14.5",cy:"7.5",r:"1.5"},"3"),t.jsx("circle",{cx:"17.5",cy:"11.5",r:"1.5"},"4")]);function G(e){return t.jsxs(Ve,{...e,viewBox:"0 0 24 24",sx:{fill:"none",...e.sx},children:[t.jsx("rect",{x:"3.25",y:"4.75",width:"17.5",height:"14.5",rx:"2.25",stroke:"currentColor",strokeWidth:"1.5"}),t.jsx("line",{x1:"8.5",y1:"5",x2:"8.5",y2:"19",stroke:"currentColor",strokeWidth:"1.5"})]})}const Rt={light:"dark",dark:"auto",auto:"light"},ie={light:"Light mode (click for dark)",dark:"Dark mode (click for auto)",auto:"Auto mode (follows OS, click for light)"};function Bt(){const{mode:e,userChoice:r,setMode:n,allowUserToggle:o}=Ue();if(!o)return null;const s=r??e,a=Rt[s],i=s==="auto"?Et:s==="dark"?Ge:Je;return t.jsx(F,{title:ie[s],children:t.jsx(V,{"aria-label":ie[s],onClick:()=>n(a),size:"small",children:t.jsx(i,{fontSize:"small"})})})}function K({label:e,onClick:r}){return t.jsx(Fe,{clickable:!0,onClick:r,label:e,size:"small","aria-label":`Navigate to ${e}`,sx:n=>({backgroundColor:"background.paper",color:"text.primary",fontWeight:500,fontSize:"0.875rem",height:32,cursor:"pointer",borderRadius:"4px",maxWidth:320,"& .MuiChip-label":{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},"&:hover":{backgroundColor:n.palette.mode==="dark"?"rgba(255, 255, 255, 0.08)":"grey.100"}})})}function Lt(){const e=he(),r=e["*"],n=q();return!e.environmentName&&!e.packageName&&!r?null:t.jsx(f,{sx:{display:"flex",alignItems:"center",minWidth:0},children:t.jsxs(ut,{"aria-label":"breadcrumb",separator:t.jsx(Ct,{sx:{fontSize:14,color:"text.secondary"}}),children:[e.environmentName&&t.jsx(K,{label:e.environmentName,onClick:o=>n(`/${e.environmentName}/`,o)}),e.packageName&&t.jsx(K,{label:e.packageName,onClick:o=>n(`/${e.environmentName}/${e.packageName}/`,o)}),r&&t.jsx(K,{label:r,onClick:o=>n(`/${e.environmentName}/${e.packageName}/${r}`,o)})]})})}const Ht=260,$t=64;function ke({isCollapsed:e,onToggleCollapse:r,logoHeader:n}){return t.jsxs(f,{sx:{height:"100dvh",width:e?$t:Ht,flexShrink:0,display:"flex",flexDirection:"column",backgroundColor:"background.paper",transition:"width 0.2s cubic-bezier(0.4, 0, 0.2, 1)",overflow:"hidden"},children:[t.jsx(Nt,{isCollapsed:e,onToggleCollapse:r,logoHeader:n}),t.jsxs(f,{sx:{flex:1,overflowY:"auto",overflowX:"hidden",py:1},children:[t.jsx(At,{isCollapsed:e}),t.jsx(Wt,{isCollapsed:e}),t.jsx(Ot,{isCollapsed:e})]}),t.jsx(Vt,{isCollapsed:e})]})}function Nt({isCollapsed:e,onToggleCollapse:r,logoHeader:n}){const o=q();return n?t.jsxs(f,{sx:{height:56,display:"flex",alignItems:"center",justifyContent:"space-between",px:e?0:2,flexShrink:0},children:[n,t.jsx(V,{size:"small",onClick:r,"aria-label":e?"Expand sidebar":"Collapse sidebar",children:t.jsx(G,{fontSize:"small"})})]}):t.jsxs(f,{sx:{minHeight:56,display:"flex",flexDirection:e?"column":"row",alignItems:"center",justifyContent:e?"center":"space-between",gap:e?.5:0,py:e?1:0,px:e?0:2,flexShrink:0},children:[t.jsxs(f,{onClick:s=>o("/",s),sx:{display:"flex",alignItems:"center",gap:1,cursor:"pointer",minWidth:0},children:[t.jsx(f,{component:"img",src:"/logo.svg",alt:"Malloy",sx:{width:24,height:24,flexShrink:0}}),!e&&t.jsx(U,{variant:"subtitle1",sx:{color:"text.primary",fontWeight:500,letterSpacing:"-0.025em",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:"Malloy Publisher"})]}),t.jsx(F,{title:e?"Expand sidebar":"Collapse sidebar",placement:"right",children:t.jsx(V,{size:"small",onClick:r,"aria-label":e?"Expand sidebar":"Collapse sidebar",children:t.jsx(G,{fontSize:"small"})})})]})}function At({isCollapsed:e}){const n=xe().pathname==="/";return t.jsx(Q,{sx:{py:0},children:t.jsx(ee,{icon:t.jsx(zt,{fontSize:"small"}),label:"Home",to:"/",selected:n,isCollapsed:e})})}function Wt({isCollapsed:e}){const{apiClients:r}=Qe(),n=he(),{data:o}=Xe({queryKey:["environments"],queryFn:()=>r.environments.listEnvironments()}),s=o?.data??[];return s.length===0?null:t.jsxs(f,{sx:{mt:1},children:[!e&&t.jsx(U,{variant:"caption",sx:{display:"block",px:3,py:1,color:"text.secondary",fontWeight:500,textTransform:"uppercase",fontSize:"0.6875rem",letterSpacing:"0.5px"},children:"Environments"}),t.jsx(Q,{sx:{py:0},children:s.map(a=>{const i=a.name??"";return t.jsx(ee,{icon:t.jsx(Mt,{fontSize:"small"}),label:i,to:`/${i}`,selected:n.environmentName===i,isCollapsed:e},i)})})]})}function Ot({isCollapsed:e}){const n=xe().pathname.startsWith("/settings/theme");return t.jsxs(f,{sx:{mt:1},children:[!e&&t.jsx(U,{variant:"caption",sx:{display:"block",px:3,py:1,color:"text.secondary",fontWeight:500,textTransform:"uppercase",fontSize:"0.6875rem",letterSpacing:"0.5px"},children:"Settings"}),t.jsx(Q,{sx:{py:0},children:t.jsx(ee,{icon:t.jsx(Dt,{fontSize:"small"}),label:"Visualization theme",to:"/settings/theme",selected:n,isCollapsed:e})})]})}function Vt({isCollapsed:e}){const r=[{label:"Malloy Docs",href:ae.docsHome,icon:t.jsx(Pt,{fontSize:"small"}),external:!0},{label:"Publisher Docs",href:ae.publishing,icon:t.jsx(Tt,{fontSize:"small"}),external:!0},{label:"Publisher API",href:"/api-doc.html",icon:t.jsx(It,{fontSize:"small"}),external:!1}];return t.jsx(Q,{sx:{py:1},children:r.map(n=>t.jsx(Ut,{label:n.label,href:n.href,icon:n.icon,external:n.external,isCollapsed:e},n.label))})}function ee({icon:e,label:r,to:n,selected:o,isCollapsed:s}){const a=q(),i=t.jsxs(fe,{selected:o,onClick:c=>a(n,c),sx:{justifyContent:s?"center":"flex-start",px:s?0:2},children:[t.jsx(me,{sx:{minWidth:s?0:36,justifyContent:"center",color:o?"text.primary":"text.secondary"},children:e}),!s&&t.jsx(ge,{primary:r,primaryTypographyProps:{variant:"body2",sx:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}}})]});return s?t.jsx(F,{title:r,placement:"right",children:t.jsx(f,{children:i})}):i}function Ut({label:e,href:r,icon:n,external:o,isCollapsed:s}){const a=t.jsxs(fe,{component:"a",href:r,target:o?"_blank":void 0,rel:o?"noopener noreferrer":void 0,sx:{justifyContent:s?"center":"flex-start",px:s?0:2},children:[t.jsx(me,{sx:{minWidth:s?0:36,justifyContent:"center",color:"text.secondary"},children:n}),!s&&t.jsx(ge,{primary:e,primaryTypographyProps:{variant:"body2",sx:{color:"text.secondary",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}}})]});return s?t.jsx(F,{title:e,placement:"right",children:t.jsx(f,{children:a})}):a}function Ft({open:e,onClose:r,logoHeader:n}){return t.jsx(wt,{anchor:"left",open:e,onClose:r,ModalProps:{keepMounted:!0},sx:{display:{xs:"block",md:"none"},"& .MuiDrawer-paper":{boxSizing:"border-box",width:260}},children:t.jsx(ke,{isCollapsed:!1,onToggleCollapse:r,logoHeader:n})})}function Yt({headerProps:e}){const r=Z(),n=St(r.breakpoints.up("md")),[o,s]=u.useState(!1),[a,i]=u.useState(!1);return u.useEffect(()=>{n&&o&&s(!1)},[n,o]),t.jsxs(f,{sx:{height:"100dvh",display:"flex",flexDirection:"row",bgcolor:"background.default"},children:[n&&t.jsx(ke,{isCollapsed:a,onToggleCollapse:()=>i(c=>!c),logoHeader:e?.logoHeader}),t.jsxs(f,{component:"main",sx:{flex:1,display:"flex",flexDirection:"column",minWidth:0},children:[t.jsxs(f,{sx:{flexShrink:0,display:"flex",alignItems:"center",justifyContent:"space-between",height:Ye.headerHeight,px:{xs:1,md:3},backgroundColor:"background.default"},children:[t.jsx(f,{sx:{display:{xs:"flex",md:"none"},alignItems:"center",mr:1},children:t.jsx(V,{size:"small",onClick:()=>s(!0),"aria-label":"Open navigation",children:t.jsx(G,{fontSize:"small"})})}),t.jsx(f,{sx:{flex:1,minWidth:0,display:"flex",alignItems:"center"},children:t.jsx(Lt,{})}),t.jsxs(f,{id:"header-actions-portal",sx:{display:"flex",alignItems:"center",flexShrink:0,gap:1},children:[t.jsx(Bt,{}),e?.endCap]})]}),t.jsx(f,{sx:{flex:1,overflow:"auto",minWidth:320,minHeight:0},children:t.jsx(u.Suspense,{fallback:t.jsx(Ke,{}),children:t.jsx(_e,{})})})]}),t.jsx(Ft,{open:o,onClose:()=>s(!1),logoHeader:e?.logoHeader})]})}export{Yt as default};
@@ -1 +1 @@
1
- import{J as r,C as t,j as e,a3 as c,ac as o}from"./index-B8pnU_V_.js";function m(){const{environmentName:a,packageName:n}=r(),s=t();if(a)if(n){const i=c({environmentName:a,packageName:n});return e.jsx(o,{onClickPackageFile:s,resourceUri:i})}else return e.jsx("div",{children:e.jsx("h2",{children:"Missing package name"})});else return e.jsx("div",{children:e.jsx("h2",{children:"Missing environment name"})})}export{m as default};
1
+ import{J as r,T as t,j as e,a3 as c,ac as o}from"./index-O-tznXBH.js";function m(){const{environmentName:a,packageName:n}=r(),s=t();if(a)if(n){const i=c({environmentName:a,packageName:n});return e.jsx(o,{onClickPackageFile:s,resourceUri:i})}else return e.jsx("div",{children:e.jsx("h2",{children:"Missing package name"})});else return e.jsx("div",{children:e.jsx("h2",{children:"Missing environment name"})})}export{m as default};
@@ -1 +1 @@
1
- import{a0 as U,C as S,a1 as C,N as k,r as p,j as e,K as r,a2 as P,a3 as N,a4 as $,J as w,Q as W,a5 as O,a6 as I,a7 as F,a8 as L,T as b,a9 as j,aa as R}from"./index-B8pnU_V_.js";function M({environmentName:a,packageName:n,dashboardName:v}){const[u]=U(),h=S(),d=C(),i=k(),y=p.useMemo(()=>Object.fromEntries(u.entries()),[u]),c=p.useRef(new Set),x=p.useCallback((s,m)=>{const l=new Set([...m,...c.current]);c.current=new Set([...c.current,...Object.keys(s),...m]);const o=new URLSearchParams(i.search);for(const t of l)Object.prototype.hasOwnProperty.call(s,t)||o.delete(t);for(const[t,f]of Object.entries(s))o.set(t,f);d({search:o.toString(),hash:i.hash},{replace:!0})},[d,i]),g=p.useCallback((s,m)=>{const l=new URLSearchParams(s.givens).toString(),o=encodeURIComponent(a),t=encodeURIComponent(n),f=encodeURIComponent(s.dashboard);h(`/${o}/${t}/dashboards/${f}`+(l?`?${l}`:""),m)},[h,a,n]);return e.jsx(r,{sx:{p:3,maxWidth:1600,mx:"auto"},children:e.jsx(P,{resourceUri:N({environmentName:a,packageName:n}),dashboard:v,givens:y,onGivensChange:x,onNavigate:g,maxResultSize:1024*1024})})}function A({environmentName:a,packageName:n,notebookPath:v}){const[u]=U(),h=S(),d=C(),i=k(),y=p.useMemo(()=>Object.fromEntries(u.entries()),[u]),c=p.useRef(new Set),x=p.useCallback((s,m)=>{const l=new Set([...m,...c.current]);c.current=new Set([...c.current,...Object.keys(s),...m]);const o=new URLSearchParams(i.search);for(const t of l)Object.prototype.hasOwnProperty.call(s,t)||o.delete(t);for(const[t,f]of Object.entries(s))o.set(t,f);d({search:o.toString(),hash:i.hash},{replace:!0})},[d,i]),g=p.useCallback((s,m)=>{const l=new URLSearchParams(s.givens).toString(),o=encodeURIComponent(a),t=encodeURIComponent(n),f=encodeURIComponent(s.dashboard);h(`/${o}/${t}/dashboards/${f}`+(l?`?${l}`:""),m)},[h,a,n]);return e.jsx(r,{sx:{p:3,maxWidth:1200,mx:"auto"},children:e.jsx($,{resourceUri:N({environmentName:a,packageName:n,modelPath:v}),maxResultSize:1024*1024,givens:y,onGivensChange:x,onNavigate:h,onDrillNavigate:g})})}function T(){const a=w(),n=a["*"],{search:v,hash:u}=k(),{server:h}=W();if(!a.environmentName)return e.jsx("div",{children:e.jsx("h2",{children:"Missing environment name"})});if(!a.packageName)return e.jsx("div",{children:e.jsx("h2",{children:"Missing package name"})});if(n?.startsWith("pages/")&&!n.endsWith(".malloy")&&!n.endsWith(".malloynb")){const x=`data-apps/${n.slice(6)}`,g=encodeURIComponent(a.environmentName),s=encodeURIComponent(a.packageName);return e.jsx(O,{to:`/${g}/${s}/${x}${v}${u}`,replace:!0})}const d={p:3,maxWidth:1200,mx:"auto"};if(n?.startsWith("dashboards/")&&!n.endsWith(".malloy")&&!n.endsWith(".malloynb"))return e.jsx(M,{environmentName:a.environmentName,packageName:a.packageName,dashboardName:n.slice(11)});if(n?.startsWith("data-apps/")&&!n.endsWith(".malloy")&&!n.endsWith(".malloynb")){const x=n.slice(10),g=N({environmentName:a.environmentName,packageName:a.packageName,modelPath:x});return e.jsx(I,{resourceUri:g})}const i=N({environmentName:a.environmentName,packageName:a.packageName,modelPath:n});if(n?.endsWith(".malloy"))return e.jsx(r,{sx:d,children:e.jsx(F,{resourceUri:i,runOnDemand:!0,maxResultSize:512*1024})});if(n?.endsWith(".malloynb"))return e.jsx(A,{environmentName:a.environmentName,packageName:a.packageName,notebookPath:n});const y=/\.[^./]+$/.test(n??""),c=L({server:h,environmentName:a.environmentName,packageName:a.packageName,path:n??""});return e.jsxs(r,{sx:d,children:[e.jsx(b,{variant:"h6",sx:{fontWeight:600},children:"Nothing to open at this path"}),e.jsxs(b,{variant:"body2",color:"text.secondary",sx:{mt:1},children:[e.jsx(r,{component:"span",sx:{fontFamily:j},children:n})," ","does not name a"," ",e.jsx(r,{component:"span",sx:{fontFamily:j},children:".malloy"})," ","or"," ",e.jsx(r,{component:"span",sx:{fontFamily:j},children:".malloynb"})," ","file in package"," ",e.jsx(r,{component:"span",sx:{fontFamily:j},children:a.packageName}),". This address opens"," ",e.jsx(r,{component:"span",sx:{fontFamily:j},children:".malloy"})," ","and"," ",e.jsx(r,{component:"span",sx:{fontFamily:j},children:".malloynb"})," ","files."]}),y&&e.jsxs(b,{variant:"body2",color:"text.secondary",sx:{mt:1},children:["A file from the package's"," ",e.jsx(r,{component:"span",sx:{fontFamily:j},children:"public/"})," ","directory is served at ",e.jsx(R,{href:c,children:c}),"."]}),e.jsxs(b,{variant:"body2",color:"text.secondary",sx:{mt:1},children:[e.jsxs(R,{href:`/${encodeURIComponent(a.environmentName)}/${encodeURIComponent(a.packageName)}`,children:["Back to ",a.packageName]})," ","lists this package's models, notebooks, and data apps."]})]})}export{T as default};
1
+ import{a0 as U,T as S,a1 as P,N as k,r as p,j as e,K as r,a2 as $,a3 as N,a4 as C,J as w,Q as W,a5 as O,a6 as I,a7 as F,a8 as L,l as b,a9 as j,aa as R}from"./index-O-tznXBH.js";function M({environmentName:a,packageName:n,dashboardName:v}){const[u]=U(),h=S(),d=P(),i=k(),y=p.useMemo(()=>Object.fromEntries(u.entries()),[u]),c=p.useRef(new Set),x=p.useCallback((s,m)=>{const l=new Set([...m,...c.current]);c.current=new Set([...c.current,...Object.keys(s),...m]);const o=new URLSearchParams(i.search);for(const t of l)Object.prototype.hasOwnProperty.call(s,t)||o.delete(t);for(const[t,f]of Object.entries(s))o.set(t,f);d({search:o.toString(),hash:i.hash},{replace:!0})},[d,i]),g=p.useCallback((s,m)=>{const l=new URLSearchParams(s.givens).toString(),o=encodeURIComponent(a),t=encodeURIComponent(n),f=encodeURIComponent(s.dashboard);h(`/${o}/${t}/dashboards/${f}`+(l?`?${l}`:""),m)},[h,a,n]);return e.jsx(r,{sx:{p:3,maxWidth:1600,mx:"auto"},children:e.jsx($,{resourceUri:N({environmentName:a,packageName:n}),dashboard:v,givens:y,onGivensChange:x,onNavigate:g,maxResultSize:1024*1024})})}function G({environmentName:a,packageName:n,notebookPath:v}){const[u]=U(),h=S(),d=P(),i=k(),y=p.useMemo(()=>Object.fromEntries(u.entries()),[u]),c=p.useRef(new Set),x=p.useCallback((s,m)=>{const l=new Set([...m,...c.current]);c.current=new Set([...c.current,...Object.keys(s),...m]);const o=new URLSearchParams(i.search);for(const t of l)Object.prototype.hasOwnProperty.call(s,t)||o.delete(t);for(const[t,f]of Object.entries(s))o.set(t,f);d({search:o.toString(),hash:i.hash},{replace:!0})},[d,i]),g=p.useCallback((s,m)=>{const l=new URLSearchParams(s.givens).toString(),o=encodeURIComponent(a),t=encodeURIComponent(n),f=encodeURIComponent(s.dashboard);h(`/${o}/${t}/dashboards/${f}`+(l?`?${l}`:""),m)},[h,a,n]);return e.jsx(r,{sx:{p:3,maxWidth:1200,mx:"auto"},children:e.jsx(C,{resourceUri:N({environmentName:a,packageName:n,modelPath:v}),maxResultSize:1024*1024,givens:y,onGivensChange:x,onNavigate:h,onDrillNavigate:g})})}function A(){const a=w(),n=a["*"],{search:v,hash:u}=k(),{server:h}=W();if(!a.environmentName)return e.jsx("div",{children:e.jsx("h2",{children:"Missing environment name"})});if(!a.packageName)return e.jsx("div",{children:e.jsx("h2",{children:"Missing package name"})});if(n?.startsWith("pages/")&&!n.endsWith(".malloy")&&!n.endsWith(".malloynb")){const x=`data-apps/${n.slice(6)}`,g=encodeURIComponent(a.environmentName),s=encodeURIComponent(a.packageName);return e.jsx(O,{to:`/${g}/${s}/${x}${v}${u}`,replace:!0})}const d={p:3,maxWidth:1200,mx:"auto"};if(n?.startsWith("dashboards/")&&!n.endsWith(".malloy")&&!n.endsWith(".malloynb"))return e.jsx(M,{environmentName:a.environmentName,packageName:a.packageName,dashboardName:n.slice(11)});if(n?.startsWith("data-apps/")&&!n.endsWith(".malloy")&&!n.endsWith(".malloynb")){const x=n.slice(10),g=N({environmentName:a.environmentName,packageName:a.packageName,modelPath:x});return e.jsx(I,{resourceUri:g})}const i=N({environmentName:a.environmentName,packageName:a.packageName,modelPath:n});if(n?.endsWith(".malloy"))return e.jsx(r,{sx:d,children:e.jsx(F,{resourceUri:i,runOnDemand:!0,maxResultSize:512*1024})});if(n?.endsWith(".malloynb"))return e.jsx(G,{environmentName:a.environmentName,packageName:a.packageName,notebookPath:n});const y=/\.[^./]+$/.test(n??""),c=L({server:h,environmentName:a.environmentName,packageName:a.packageName,path:n??""});return e.jsxs(r,{sx:d,children:[e.jsx(b,{variant:"h6",sx:{fontWeight:600},children:"Nothing to open at this path"}),e.jsxs(b,{variant:"body2",color:"text.secondary",sx:{mt:1},children:[e.jsx(r,{component:"span",sx:{fontFamily:j},children:n})," ","does not name a"," ",e.jsx(r,{component:"span",sx:{fontFamily:j},children:".malloy"})," ","or"," ",e.jsx(r,{component:"span",sx:{fontFamily:j},children:".malloynb"})," ","file in package"," ",e.jsx(r,{component:"span",sx:{fontFamily:j},children:a.packageName}),". This address opens"," ",e.jsx(r,{component:"span",sx:{fontFamily:j},children:".malloy"})," ","and"," ",e.jsx(r,{component:"span",sx:{fontFamily:j},children:".malloynb"})," ","files."]}),y&&e.jsxs(b,{variant:"body2",color:"text.secondary",sx:{mt:1},children:["A file from the package's"," ",e.jsx(r,{component:"span",sx:{fontFamily:j},children:"public/"})," ","directory is served at ",e.jsx(R,{href:c,children:c}),"."]}),e.jsxs(b,{variant:"body2",color:"text.secondary",sx:{mt:1},children:[e.jsxs(R,{href:`/${encodeURIComponent(a.environmentName)}/${encodeURIComponent(a.packageName)}`,children:["Back to ",a.packageName]})," ","lists this package's models, notebooks, and data apps."]})]})}export{A as default};
@@ -1 +1 @@
1
- import{J as r,C as t,j as e,a3 as c,ab as o}from"./index-B8pnU_V_.js";function l(){const{environmentName:a,packageName:n}=r(),s=t();if(a)if(n){const i=c({environmentName:a,packageName:n});return e.jsx(o,{onClickPackageFile:s,resourceUri:i})}else return e.jsx("div",{children:e.jsx("h2",{children:"Missing package name"})});else return e.jsx("div",{children:e.jsx("h2",{children:"Missing environment name"})})}export{l as default};
1
+ import{J as r,T as t,j as e,a3 as c,ab as o}from"./index-O-tznXBH.js";function l(){const{environmentName:a,packageName:n}=r(),s=t();if(a)if(n){const i=c({environmentName:a,packageName:n});return e.jsx(o,{onClickPackageFile:s,resourceUri:i})}else return e.jsx("div",{children:e.jsx("h2",{children:"Missing package name"})});else return e.jsx("div",{children:e.jsx("h2",{children:"Missing environment name"})})}export{l as default};
@@ -1 +1 @@
1
- import{ae as o,j as r,af as s,ag as n,K as t,T as a}from"./index-B8pnU_V_.js";function x(){const e=o();return console.error(e),r.jsx(s,{maxWidth:"lg",component:"main",sx:{display:"flex",flexDirection:"column",my:2,gap:0},children:r.jsxs(n,{sx:{m:"auto",flexDirection:"column"},children:[r.jsx(t,{sx:{height:"300px"}}),r.jsx("img",{src:"/error.png"}),r.jsx(a,{variant:"subtitle1",children:"An unexpected error occurred"})]})})}export{x as default};
1
+ import{ae as o,j as r,af as s,ag as n,K as t,l as a}from"./index-O-tznXBH.js";function x(){const e=o();return console.error(e),r.jsx(s,{maxWidth:"lg",component:"main",sx:{display:"flex",flexDirection:"column",my:2,gap:0},children:r.jsxs(n,{sx:{m:"auto",flexDirection:"column"},children:[r.jsx(t,{sx:{height:"300px"}}),r.jsx("img",{src:"/error.png"}),r.jsx(a,{variant:"subtitle1",children:"An unexpected error occurred"})]})})}export{x as default};