@malloy-publisher/app 0.5.1 → 0.7.0
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 +125 -59
- package/dist/assets/{EnvironmentPage-B02geyxh.js → EnvironmentPage-ufeWfqnK.js} +1 -1
- package/dist/assets/{HomePage-BdKzZEto.js → HomePage-CN_FgmtD.js} +1 -1
- package/dist/assets/{LightMode-BRAs1k98.js → LightMode-BFbC4W45.js} +1 -1
- package/dist/assets/{MainPage-D9XZbGvk.js → MainPage-BcCyzakx.js} +1 -1
- package/dist/assets/{ModelPage-B-U47DzF.js → ModelPage-wHHnxoih.js} +2 -2
- package/dist/assets/{PackagePage-CDp9A3_k.js → PackagePage-DwdO-2dp.js} +1 -1
- package/dist/assets/{RenderedResult-CTD2Ej2S.es-BZsZAiwo.js → RenderedResult-CYyhQekT.es-DBHF8EwO.js} +2 -2
- package/dist/assets/{RouteError-CSsLG99c.js → RouteError-Blt6a2Za.js} +1 -1
- package/dist/assets/{ThemeEditorPage-C4u5l49i.js → ThemeEditorPage-Cb-2YbfG.js} +1 -1
- package/dist/assets/{ToggleButtonGroup-IBhUYkv_.js → ToggleButtonGroup-BuhURn8v.js} +1 -1
- package/dist/assets/{index-DOXSuS-a.js → index-BELjGKhI.js} +1 -1
- package/dist/assets/{index--DAcpR5Y.js → index-BJyLY8XQ.js} +1 -1
- package/dist/assets/{index-BKNRDF5y.js → index-DCizS2BO.js} +1 -1
- package/dist/assets/{index-Bd7WYNw_.js → index-Dz4y_2PE.js} +4 -4
- package/dist/assets/{index-CshLRozl.js → index-kt4oTEGz.js} +1 -1
- package/dist/assets/{index.es-Bj77sE9l.js → index.es-u5PRRTzT.js} +4 -4
- package/dist/index.html +1 -1
- package/package.json +2 -2
package/dist/api-doc.yaml
CHANGED
|
@@ -870,6 +870,8 @@ paths:
|
|
|
870
870
|
$ref: "#/components/schemas/QueryData"
|
|
871
871
|
"401":
|
|
872
872
|
$ref: "#/components/responses/Unauthorized"
|
|
873
|
+
"403":
|
|
874
|
+
$ref: "#/components/responses/Forbidden"
|
|
873
875
|
"404":
|
|
874
876
|
$ref: "#/components/responses/NotFound"
|
|
875
877
|
"413":
|
|
@@ -1240,6 +1242,8 @@ paths:
|
|
|
1240
1242
|
$ref: "#/components/schemas/QueryData"
|
|
1241
1243
|
"401":
|
|
1242
1244
|
$ref: "#/components/responses/Unauthorized"
|
|
1245
|
+
"403":
|
|
1246
|
+
$ref: "#/components/responses/Forbidden"
|
|
1243
1247
|
"404":
|
|
1244
1248
|
$ref: "#/components/responses/NotFound"
|
|
1245
1249
|
"413":
|
|
@@ -1802,6 +1806,8 @@ paths:
|
|
|
1802
1806
|
$ref: "#/components/responses/BadRequest"
|
|
1803
1807
|
"401":
|
|
1804
1808
|
$ref: "#/components/responses/Unauthorized"
|
|
1809
|
+
"403":
|
|
1810
|
+
$ref: "#/components/responses/Forbidden"
|
|
1805
1811
|
"404":
|
|
1806
1812
|
$ref: "#/components/responses/NotFound"
|
|
1807
1813
|
"413":
|
|
@@ -1863,6 +1869,8 @@ paths:
|
|
|
1863
1869
|
$ref: "#/components/schemas/CompileResult"
|
|
1864
1870
|
"400":
|
|
1865
1871
|
$ref: "#/components/responses/BadRequest"
|
|
1872
|
+
"403":
|
|
1873
|
+
$ref: "#/components/responses/Forbidden"
|
|
1866
1874
|
"404":
|
|
1867
1875
|
$ref: "#/components/responses/NotFound"
|
|
1868
1876
|
"500":
|
|
@@ -1891,25 +1899,31 @@ paths:
|
|
|
1891
1899
|
serving, so `error` is only reachable on the paths that keep per-model
|
|
1892
1900
|
placeholders. Treat it as present-but-uncommon rather than the normal
|
|
1893
1901
|
way a broken dashboard surfaces. When the package curates its query surface
|
|
1894
|
-
(
|
|
1895
|
-
`
|
|
1896
|
-
|
|
1902
|
+
(a surface from `explores` or from a root `index.malloy`, with
|
|
1903
|
+
`queryableSources` left at `"declared"`), a dashboard whose entry file is
|
|
1904
|
+
not on that surface is omitted, because its query and given names would
|
|
1905
|
+
not be runnable. A root `index.malloy` cannot export a dashboard file,
|
|
1906
|
+
so a package curated only by that file omits every dashboard; the omission is reported in the package's `warnings` as of the
|
|
1897
1907
|
last load. A metadata `PATCH` that TIGHTENS curation takes effect on
|
|
1898
1908
|
this listing immediately; one that relaxes it takes effect on the next
|
|
1899
1909
|
package reload, because the withheld dashboards were never built into
|
|
1900
1910
|
the cached set. Either way the matching warning is computed at load, so
|
|
1901
1911
|
after a `PATCH` it appears only once the package reloads.
|
|
1902
1912
|
|
|
1903
|
-
Where the boundary is active at all, which needs `explores`
|
|
1904
|
-
AND `queryableSources` left at
|
|
1913
|
+
Where the boundary is active at all, which needs a surface (`explores`
|
|
1914
|
+
declared, or a root `index.malloy`) AND `queryableSources` left at
|
|
1915
|
+
`"declared"`, being listed does not by
|
|
1905
1916
|
itself guarantee the dashboard runs: the queryable sources are the
|
|
1906
1917
|
union of every listed file's `export {}` closure, so a dashboard whose
|
|
1907
1918
|
tiles read a source that only an UNLISTED file exports is still served
|
|
1908
1919
|
while those queries are refused. The fix is to list that file too, or
|
|
1909
1920
|
to re-export the source from one already listed. It is served rather
|
|
1910
1921
|
than withheld because withholding on a guess would hide dashboards that
|
|
1911
|
-
do work.
|
|
1912
|
-
|
|
1922
|
+
do work. Each such tile is reported in the package's `warnings` with
|
|
1923
|
+
severity `error`, as of the last load, naming the tile. The check reads
|
|
1924
|
+
the tile's source from its text, so a tile written in a form it cannot
|
|
1925
|
+
read is not reported. Under `"all"` nothing is refused, so the
|
|
1926
|
+
situation does not arise.
|
|
1913
1927
|
parameters:
|
|
1914
1928
|
- name: environmentName
|
|
1915
1929
|
in: path
|
|
@@ -2202,6 +2216,8 @@ paths:
|
|
|
2202
2216
|
$ref: "#/components/responses/BadRequest"
|
|
2203
2217
|
"401":
|
|
2204
2218
|
$ref: "#/components/responses/Unauthorized"
|
|
2219
|
+
"403":
|
|
2220
|
+
$ref: "#/components/responses/Forbidden"
|
|
2205
2221
|
"404":
|
|
2206
2222
|
$ref: "#/components/responses/NotFound"
|
|
2207
2223
|
"413":
|
|
@@ -3078,17 +3094,29 @@ components:
|
|
|
3078
3094
|
loaded; defaults to `package` when the manifest omits it.
|
|
3079
3095
|
explores:
|
|
3080
3096
|
type: array
|
|
3097
|
+
deprecated: true
|
|
3081
3098
|
items:
|
|
3082
3099
|
type: string
|
|
3083
3100
|
description: >-
|
|
3084
|
-
|
|
3085
|
-
|
|
3086
|
-
`listModels()`, and within-file discovery is filtered to each
|
|
3087
|
-
model's `export {}` closure.
|
|
3088
|
-
|
|
3089
|
-
.malloy file still compiles for import/join resolution but is
|
|
3090
|
-
hidden from listings once `explores` is declared. Notebooks are
|
|
3101
|
+
The package's discovery surface and query boundary: model file
|
|
3102
|
+
paths relative to the package root. Only these models are listed
|
|
3103
|
+
via `listModels()`, and within-file discovery is filtered to each
|
|
3104
|
+
model's `export {}` closure. Every other .malloy file still
|
|
3105
|
+
compiles for import/join resolution but is hidden. Notebooks are
|
|
3091
3106
|
always listed regardless of this field.
|
|
3107
|
+
DEPRECATED for a one-file surface, still honored: a root
|
|
3108
|
+
`index.malloy` is the surface when this key is absent, and gives the
|
|
3109
|
+
same listing and the same boundary with no manifest field. A surface
|
|
3110
|
+
spanning several files is what the convention cannot express, so
|
|
3111
|
+
that use stays supported, with no replacement and no deprecation
|
|
3112
|
+
warning at load.
|
|
3113
|
+
This value MAY have been derived by the server from a root
|
|
3114
|
+
`index.malloy` rather than written by the package author, and the
|
|
3115
|
+
response does not distinguish the two — deliberately, because
|
|
3116
|
+
nothing downstream treats them differently. An explicit key always
|
|
3117
|
+
wins over the convention, and an explicit empty array means
|
|
3118
|
+
"do not curate" and suppresses it. A package is uncurated only when
|
|
3119
|
+
it has neither this key nor a root `index.malloy`.
|
|
3092
3120
|
exploresWarnings:
|
|
3093
3121
|
type: array
|
|
3094
3122
|
readOnly: true
|
|
@@ -3122,14 +3150,18 @@ components:
|
|
|
3122
3150
|
degrade attribution. A refusal is the one materialization finding the
|
|
3123
3151
|
build plan cannot also be read for: a refused `storage`/`colocated`
|
|
3124
3152
|
source is ABSENT from `BuildPlan.sources`, so nothing there records
|
|
3125
|
-
that the annotation was written at all. Discovery findings: a model
|
|
3126
|
-
export closure surfaces no sources or
|
|
3127
|
-
empty and renders a blank page
|
|
3153
|
+
that the annotation was written at all. Discovery findings: a model
|
|
3154
|
+
on the package's surface whose export closure surfaces no sources or
|
|
3155
|
+
named queries, so it lists as empty and renders a blank page; a
|
|
3156
|
+
surface whose every model failed to compile, so every model in the
|
|
3157
|
+
package answers 404 by name; and, on the reload that caused it, a
|
|
3158
|
+
package that had a surface and now has none, so every source that
|
|
3159
|
+
surface withheld is listed and queryable by name again. Dashboard findings: a
|
|
3128
3160
|
`dashboards/` file whose `# artifact` tag does not parse or does not
|
|
3129
3161
|
describe a dashboard, a tile or suggest query that does not resolve,
|
|
3130
3162
|
a `# drill` naming a destination that is not a dashboard, and a
|
|
3131
3163
|
dashboard held back from the listing because its entry file is not
|
|
3132
|
-
|
|
3164
|
+
on the package's surface. Two dashboard findings are about Publisher rather
|
|
3133
3165
|
than about the package: one when a file carrying an artifact tag
|
|
3134
3166
|
could not be read and so is not served at all, and one when the lint
|
|
3135
3167
|
stops early, in which case the list must be read as incomplete
|
|
@@ -3157,7 +3189,7 @@ components:
|
|
|
3157
3189
|
FAN-OUT join (`join_many` or `join_cross`), which can multiply rows,
|
|
3158
3190
|
while a `join_one` is permitted and a measure aggregating through one
|
|
3159
3191
|
is served normally; a base source that already fails persist eligibility (unbound
|
|
3160
|
-
parameters, `given` references,
|
|
3192
|
+
parameters, `given` references, authorize gates); `sharing=` or
|
|
3161
3193
|
`schedule=` at the resource level; and a synthesized rollup name that
|
|
3162
3194
|
collides with an existing model object.
|
|
3163
3195
|
|
|
@@ -3261,6 +3293,7 @@ components:
|
|
|
3261
3293
|
never reached are exactly what it cannot report.
|
|
3262
3294
|
queryableSources:
|
|
3263
3295
|
type: string
|
|
3296
|
+
deprecated: true
|
|
3264
3297
|
enum:
|
|
3265
3298
|
- declared
|
|
3266
3299
|
- all
|
|
@@ -3279,16 +3312,25 @@ components:
|
|
|
3279
3312
|
directly queryable (denied with 404).
|
|
3280
3313
|
The `/compile` endpoint is exempt (compile is the authoring loop;
|
|
3281
3314
|
the boundary is discovery curation, not access control — for
|
|
3282
|
-
confidentiality use `#(authorize)`, which gates compile too).
|
|
3283
|
-
source that is both hidden and
|
|
3315
|
+
confidentiality use `#(authorize)`, which gates compile too).
|
|
3316
|
+
A source that is both hidden and authorize-gated still answers
|
|
3284
3317
|
`/compile` with the generic 404, so the exemption cannot be used to
|
|
3285
3318
|
enumerate gated names.
|
|
3286
3319
|
`"all"` decouples the axes: `explores`/`export {}` gate discovery
|
|
3287
|
-
only and every compiled source stays directly queryable.
|
|
3288
|
-
|
|
3289
|
-
|
|
3290
|
-
`
|
|
3291
|
-
|
|
3320
|
+
only and every compiled source stays directly queryable. The two
|
|
3321
|
+
modes are equivalent (everything queryable) only where there is no
|
|
3322
|
+
curated surface at all, which now means no `explores` AND no root
|
|
3323
|
+
`index.malloy` — a package with that file has a surface whether or
|
|
3324
|
+
not the key is present. Invalid values fall back to `"declared"`. Identity-based access is a separate concern — see
|
|
3325
|
+
`#(authorize)` and `#(access_filter)`.
|
|
3326
|
+
DEPRECATED, still honored. `"declared"` is already the default, so
|
|
3327
|
+
the key changes nothing and a root `index.malloy` gives the same
|
|
3328
|
+
curated-and-enforced surface with no manifest field.
|
|
3329
|
+
`"all"` is the exception: `index.malloy` does NOT replace it,
|
|
3330
|
+
because a surface derived from one always enforces the boundary.
|
|
3331
|
+
It stays supported with no deprecation warning at load. To curate
|
|
3332
|
+
listings without refusing queries, keep both this key and an
|
|
3333
|
+
explicit `explores`.
|
|
3292
3334
|
manifestLocation:
|
|
3293
3335
|
type: ["string", "null"]
|
|
3294
3336
|
description: |
|
|
@@ -4201,7 +4243,7 @@ components:
|
|
|
4201
4243
|
description: |
|
|
4202
4244
|
The givens the suggest query needs in its request to run: the ones
|
|
4203
4245
|
the source it reads is scoped by (a source-level `where: … ~ $X`)
|
|
4204
|
-
or gated by (an
|
|
4246
|
+
or gated by (an authorize gate reading `$X`), plus, for the `query`
|
|
4205
4247
|
form, the named query's own. A client sends the current values of
|
|
4206
4248
|
exactly these, so a gated source's options load while the option
|
|
4207
4249
|
list still does not depend on the page's other filters. Absent
|
|
@@ -4276,41 +4318,66 @@ components:
|
|
|
4276
4318
|
authorize:
|
|
4277
4319
|
type: array
|
|
4278
4320
|
description: >-
|
|
4279
|
-
Effective authorize
|
|
4280
|
-
|
|
4281
|
-
|
|
4282
|
-
|
|
4283
|
-
|
|
4284
|
-
|
|
4285
|
-
|
|
4286
|
-
|
|
4287
|
-
|
|
4288
|
-
|
|
4289
|
-
|
|
4290
|
-
|
|
4291
|
-
|
|
4292
|
-
|
|
4293
|
-
200 with zero rows as "no gate applied". A 403 means the gate
|
|
4294
|
-
could not be applied at all: the entry point renamed or dropped a
|
|
4295
|
-
field the gate reads, or a given the gate names was not supplied.
|
|
4296
|
-
Both are denials, but only one is visible as a status code.
|
|
4321
|
+
Effective `#(authorize)` expressions locking this source: a rule
|
|
4322
|
+
about the CALLER (`'literal' <op> $GIVEN`), or a whole-body
|
|
4323
|
+
`"true"`/`"false"` sentinel. It answers whether the caller may
|
|
4324
|
+
reach the source at all, so **a caller it does not admit is
|
|
4325
|
+
refused with HTTP 403** — not served zero rows. An empty or absent
|
|
4326
|
+
list means no lock.
|
|
4327
|
+
|
|
4328
|
+
Reported whether the gate is declared on this source itself or
|
|
4329
|
+
carried in from elsewhere (the source it extends, a query-source
|
|
4330
|
+
base, a composite member). Where the gate registry cannot
|
|
4331
|
+
attribute an expression to a declaring source it reports `"false"`
|
|
4332
|
+
instead — a fail-closed placeholder, not something the author
|
|
4333
|
+
wrote, and one more reason to read this list only as "locked"
|
|
4334
|
+
rather than as a predicate.
|
|
4297
4335
|
|
|
4298
4336
|
IMPORTANT for anything re-implementing the decision: this flat
|
|
4299
4337
|
list is not a predicate you can evaluate, and it is not a count of
|
|
4300
|
-
one. A source may declare
|
|
4301
|
-
list flattens every gate carried in,
|
|
4302
|
-
normal
|
|
4303
|
-
authored gate twice, once from its base and once
|
|
4304
|
-
member. Expressions
|
|
4305
|
-
AND-ed rather than OR-ed. Treat the list as
|
|
4306
|
-
constraints apply": use it to decide THAT a source
|
|
4307
|
-
to recompute WHETHER a given caller passes. Reading
|
|
4308
|
-
disjunction grants where Publisher denies.
|
|
4338
|
+
one. A source may declare more than one gate of its OWN — repeats
|
|
4339
|
+
AND together — and the list also flattens every gate carried in,
|
|
4340
|
+
so several elements are normal; a query source over a composite
|
|
4341
|
+
reports the same authored gate twice, once from its base and once
|
|
4342
|
+
from the resolved member. Expressions from different declaring
|
|
4343
|
+
sources are likewise AND-ed rather than OR-ed. Treat the list as
|
|
4344
|
+
"at least these constraints apply": use it to decide THAT a source
|
|
4345
|
+
is locked, not to recompute WHETHER a given caller passes. Reading
|
|
4346
|
+
it as a pure disjunction grants where Publisher denies.
|
|
4347
|
+
|
|
4348
|
+
Read the sentinels ELEMENT-WISE, never as a verdict on the list: a
|
|
4349
|
+
list is unlocked only when `"true"` is its SOLE element, because
|
|
4350
|
+
gates from different declaring sources are flattened in here and
|
|
4351
|
+
AND together, so `["true", "'finance' in $GROUPS"]` is a real shape
|
|
4352
|
+
and is locked. `"false"` needs no such care — anywhere in the list
|
|
4353
|
+
it denies.
|
|
4309
4354
|
|
|
4310
4355
|
Givens are caller-asserted, so this is a boundary only behind a
|
|
4311
4356
|
trusted tier — see docs/authorize.md.
|
|
4312
4357
|
items:
|
|
4313
4358
|
type: string
|
|
4359
|
+
accessFilter:
|
|
4360
|
+
type: array
|
|
4361
|
+
description: >-
|
|
4362
|
+
Effective `#(access_filter)` expressions filtering this source's
|
|
4363
|
+
rows: `field_path <op> $GIVEN`, grafted onto the source the query
|
|
4364
|
+
enters through. It answers which rows the caller may see, so **a
|
|
4365
|
+
caller it admits nowhere gets HTTP 200 with zero rows**, not a 403.
|
|
4366
|
+
An empty or absent list means no row filter.
|
|
4367
|
+
|
|
4368
|
+
Do not read a 200 with zero rows as "no filter applied", and do not
|
|
4369
|
+
read a non-empty result as proof rows got through: an ungrouped
|
|
4370
|
+
aggregate is row-count-preserving over empty input, so `count()`
|
|
4371
|
+
returns one row reading 0 even when the filter admitted nothing.
|
|
4372
|
+
|
|
4373
|
+
Same flattening, AND-not-OR and attribution caveats as `authorize`
|
|
4374
|
+
apply — this is a signal that the source is filtered, not a
|
|
4375
|
+
predicate to re-evaluate. There are no sentinels on this route:
|
|
4376
|
+
`true` and `false` belong to `authorize`. Givens are
|
|
4377
|
+
caller-asserted, so this is a boundary only behind a trusted tier —
|
|
4378
|
+
see docs/authorize.md.
|
|
4379
|
+
items:
|
|
4380
|
+
type: string
|
|
4314
4381
|
|
|
4315
4382
|
QueryRequest:
|
|
4316
4383
|
type: object
|
|
@@ -5931,7 +5998,7 @@ components:
|
|
|
5931
5998
|
One `#@ persist` source refused at compile time, and why. Computed
|
|
5932
5999
|
from the SAME tier-appropriate eligibility assert the build path
|
|
5933
6000
|
itself enforces (the colocated tier's post-relaxation admission for a
|
|
5934
|
-
proven row-level, fully-attributed
|
|
6001
|
+
proven row-level, fully-attributed authorize gate applies here
|
|
5935
6002
|
too), so a source this reports as refused is refused for the tier it
|
|
5936
6003
|
would actually build under — never the unconditional
|
|
5937
6004
|
`storage=`-destination check applied to a source that declares no
|
|
@@ -5960,12 +6027,12 @@ components:
|
|
|
5960
6027
|
Which build path this source was evaluated against: `storage` for
|
|
5961
6028
|
a source declaring `#@ persist storage=<ref>` (evaluated against
|
|
5962
6029
|
the full storage-destination eligibility gate, which never
|
|
5963
|
-
admits an
|
|
6030
|
+
admits an authorize-gated source); `colocated` for a plain
|
|
5964
6031
|
`#@ persist` (evaluated against the colocated gate, which admits
|
|
5965
6032
|
a proven row-level, fully-attributed gate); `preaggregate` for a
|
|
5966
6033
|
`#@ preaggregate` rollup (evaluated against the pre-aggregation
|
|
5967
6034
|
gate, which refuses unconditionally when the rollup's base is
|
|
5968
|
-
|
|
6035
|
+
authorize-gated — rollups group away the gate column, so
|
|
5969
6036
|
there is no row-level admission the way colocated has).
|
|
5970
6037
|
reason:
|
|
5971
6038
|
type: string
|
|
@@ -5983,13 +6050,12 @@ components:
|
|
|
5983
6050
|
merge_key_scope_unresolved,
|
|
5984
6051
|
preaggregate_over_dynamic_source,
|
|
5985
6052
|
authorize,
|
|
5986
|
-
partition,
|
|
5987
6053
|
not_duckdb_portable,
|
|
5988
6054
|
public_surface_unknown,
|
|
5989
6055
|
]
|
|
5990
6056
|
description: >-
|
|
5991
6057
|
The bounded refusal reason. Only the compile-time reasons can
|
|
5992
|
-
appear here — `free_parameter`, `authorize`,
|
|
6058
|
+
appear here — `free_parameter`, `authorize`, the four
|
|
5993
6059
|
that name where a given the build could not strip sits
|
|
5994
6060
|
(`given_in_persisted_query`, `dynamic_projection`, `dynamic_join`,
|
|
5995
6061
|
`dynamic_joined_where`), the three that name an unusable
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Q as r,K as t,j as e,a7 as i,ai as o}from"./index-
|
|
1
|
+
import{Q as r,K as t,j as e,a7 as i,ai as o}from"./index-Dz4y_2PE.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{Q as t,j as o,f as a}from"./index-
|
|
1
|
+
import{Q as t,j as o,f as a}from"./index-Dz4y_2PE.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-
|
|
1
|
+
import{c,j as s}from"./index-Dz4y_2PE.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,g as Ce,r as u,R as Ie,a as ze,c as S,j as t,s as z,B as Me,m as K,e as ne,b as le,d as ce,h as de,i as De,k as Q,l as pe,T as G,n as J,o as Te,p as Re,q as Be,t as ue,v as Le,w as oe,x as He,y as $e,z as Ne,A as W,C as $,M as Ae,P as Oe,D as We,E as Ve,S as Qe,F as Ue,G as A,I as N,H as Fe,J as he,K as fe,Q as Z,L as m,N as Xe,O as q,U as Ye,V as _e,$ as se,W as xe,X as me,Y as ge,Z as Ke,_ as Ge,a0 as Je}from"./index-
|
|
1
|
+
import{u as Pe,g as Ce,r as u,R as Ie,a as ze,c as S,j as t,s as z,B as Me,m as K,e as ne,b as le,d as ce,h as de,i as De,k as Q,l as pe,T as G,n as J,o as Te,p as Re,q as Be,t as ue,v as Le,w as oe,x as He,y as $e,z as Ne,A as W,C as $,M as Ae,P as Oe,D as We,E as Ve,S as Qe,F as Ue,G as A,I as N,H as Fe,J as he,K as fe,Q as Z,L as m,N as Xe,O as q,U as Ye,V as _e,$ as se,W as xe,X as me,Y as ge,Z as Ke,_ as Ge,a0 as Je}from"./index-Dz4y_2PE.js";import{D as Ze,L as qe}from"./LightMode-BFbC4W45.js";function et(e,r,n,o,s){const[a,i]=u.useState(()=>s&&n?n(e).matches:o?o(e).matches:r);return ze(()=>{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 tt={...Ie},ye=tt.useSyncExternalStore;function rt(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,x=>(p.addEventListener("change",x),()=>{p.removeEventListener("change",x)})]},[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:f=null,noSsr:p=!1}=Ce({name:"MuiUseMediaQuery",props:s,theme:a});let x=typeof o=="function"?o(a):o;return x=x.replace(/^@media( ?)/m,""),x.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?rt:et)(x,c,h,f,p)}}be();const nt=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"})),ot=z(Me,{name:"MuiBreadcrumbCollapsed"})(K(({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:ne(e.palette.grey[200],.12)}:{backgroundColor:ne(e.palette.grey[600],.12)}}}))),st=z(nt)({width:24,height:16});function at(e){const{slots:r={},slotProps:n={},...o}=e,s=e;return t.jsx("li",{children:t.jsx(ot,{focusRipple:!0,...o,ownerState:s,children:t.jsx(st,{as:r.CollapsedIcon,ownerState:s,...n.collapsedIcon})})})}function it(e){return ce("MuiBreadcrumbs",e)}const lt=le("MuiBreadcrumbs",["root","ol","li","separator"]),ct=e=>{const{classes:r}=e;return pe({root:["root"],li:["li"],ol:["ol"],separator:["separator"]},it,r)},dt=z(G,{name:"MuiBreadcrumbs",slot:"Root",overridesResolver:(e,r)=>[{[`& .${lt.li}`]:r.li},r.root]})({}),pt=z("ol",{name:"MuiBreadcrumbs",slot:"Ol"})({display:"flex",flexWrap:"wrap",alignItems:"center",padding:0,margin:0,listStyle:"none"}),ut=z("li",{name:"MuiBreadcrumbs",slot:"Separator"})({display:"flex",userSelect:"none",marginLeft:8,marginRight:8});function ht(e,r,n,o){return e.reduce((s,a,i)=>(i<e.length-1?s=s.concat(a,t.jsx(ut,{"aria-hidden":!0,className:r,ownerState:o,children:n},`separator-${i}`)):s.push(a),s),[])}const ft=u.forwardRef(function(r,n){const o=de({props:r,name:"MuiBreadcrumbs"}),{children:s,className:a,component:i="nav",slots:c={},slotProps:h={},expandText:f="Show path",itemsAfterCollapse:p=1,itemsBeforeCollapse:x=1,maxItems:y=8,separator:E="/",...H}=o,[M,P]=u.useState(!1),v={...o,component:i,expanded:M,expandText:f,itemsAfterCollapse:p,itemsBeforeCollapse:x,maxItems:y,separator:E},C=ct(v),D=De({elementType:c.CollapsedIcon,externalSlotProps:h.collapsedIcon,ownerState:v}),j=u.useRef(null),k=d=>{const w=()=>{P(!0);const b=j.current.querySelector("a[href],button,[tabindex]");b&&b.focus()};return x+p>=d.length?d:[...d.slice(0,x),t.jsx(at,{"aria-label":f,slots:{CollapsedIcon:c.CollapsedIcon},slotProps:{collapsedIcon:D},onClick:w},"ellipsis"),...d.slice(d.length-p,d.length)]},T=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(dt,{ref:n,component:i,color:"textSecondary",className:Q(C.root,a),ownerState:v,...H,children:t.jsx(pt,{className:C.ol,ref:j,ownerState:v,children:ht(M||y&&T.length<=y?T:k(T),C.separator,E,v)})})});function xt(e,r,n){const o=r.getBoundingClientRect(),s=n&&n.getBoundingClientRect(),a=ue(r);let i;if(r.fakeTransform)i=r.fakeTransform;else{const f=a.getComputedStyle(r);i=f.getPropertyValue("-webkit-transform")||f.getPropertyValue("transform")}let c=0,h=0;if(i&&i!=="none"&&typeof i=="string"){const f=i.split("(")[1].split(")")[0].split(",");c=parseInt(f[4],10),h=parseInt(f[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 mt(e){return typeof e=="function"?e():e}function V(e,r,n){const o=mt(n),s=xt(e,r,o);s&&(r.style.webkitTransform=s,r.style.transform=s)}const gt=u.forwardRef(function(r,n){const o=J(),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:f,direction:p="down",easing:x=s,in:y,onEnter:E,onEntered:H,onEntering:M,onExit:P,onExited:v,onExiting:C,style:D,timeout:j=a,TransitionComponent:k=Te,...T}=r,d=u.useRef(null),w=Re(Be(h),d,n),b=l=>g=>{l&&(g===void 0?l(d.current):l(d.current,g))},U=b((l,g)=>{V(p,l,f),He(l),E&&E(l,g)}),ee=b((l,g)=>{const L=oe({timeout:j,style:D,easing:x},{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",M&&M(l,g)}),R=b(H),B=b(C),I=b(l=>{const g=oe({timeout:j,style:D,easing:x},{mode:"exit"});l.style.webkitTransition=o.transitions.create("-webkit-transform",g),l.style.transition=o.transitions.create("transform",g),V(p,l,f),P&&P(l)}),F=b(l=>{l.style.webkitTransition="",l.style.transition="",v&&v(l)}),X=l=>{i&&i(d.current,l)},O=u.useCallback(()=>{d.current&&V(p,d.current,f)},[p,f]);return u.useEffect(()=>{if(y||p==="down"||p==="right")return;const l=Le(()=>{d.current&&V(p,d.current,f)}),g=ue(d.current);return g.addEventListener("resize",l),()=>{l.clear(),g.removeEventListener("resize",l)}},[p,y,f]),u.useEffect(()=>{y||O()},[y,O]),t.jsx(k,{nodeRef:d,onEnter:U,onEntered:R,onEntering:ee,onExit:I,onExited:F,onExiting:B,addEndListener:X,appear:c,in:y,timeout:j,...T,children:(l,{ownerState:g,...L})=>u.cloneElement(h,{ref:w,style:{visibility:l==="exited"&&!y?"hidden":void 0,...D,...h.props.style},...L})})});function yt(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]},bt=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,yt,r)},vt=z(Ae,{name:"MuiDrawer",slot:"Root",overridesResolver:ve})(K(({theme:e})=>({zIndex:(e.vars||e).zIndex.drawer}))),jt=z("div",{shouldForwardProp:We,name:"MuiDrawer",slot:"Docked",skipVariantsResolver:!1,overridesResolver:ve})({flex:"0 0 auto"}),kt=z(Oe,{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)}`]]}})(K(({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 wt(e){return["left","right"].includes(e)}function St({direction:e},r){return e==="rtl"&&wt(r)?je[r]:r}const Et=u.forwardRef(function(r,n){const o=de({props:r,name:"MuiDrawer"}),s=J(),a=$e(),i={enter:s.transitions.duration.enteringScreen,exit:s.transitions.duration.leavingScreen},{anchor:c="left",BackdropProps:h,children:f,className:p,elevation:x=16,hideBackdrop:y=!1,ModalProps:{BackdropProps:E,...H}={},onClose:M,open:P=!1,PaperProps:v={},SlideProps:C,TransitionComponent:D,transitionDuration:j=i,variant:k="temporary",slots:T={},slotProps:d={},...w}=o,b=u.useRef(!1);u.useEffect(()=>{b.current=!0},[]);const U=St({direction:a?"rtl":"ltr"},c),R={...o,anchor:c,elevation:x,open:P,variant:k,...w},B=bt(R),I={slots:{transition:D,...T},slotProps:{paper:v,transition:C,...d,backdrop:Ne(d.backdrop||{...h,...E},{transitionDuration:j})}},[F,X]=W("root",{ref:n,elementType:vt,className:Q(B.root,B.modal,p),shouldForwardComponentProp:!0,ownerState:R,externalForwardedProps:{...I,...w,...H},additionalProps:{open:P,onClose:M,hideBackdrop:y,slots:{backdrop:I.slots.backdrop},slotProps:{backdrop:I.slotProps.backdrop}}}),[O,l]=W("paper",{elementType:kt,shouldForwardComponentProp:!0,className:Q(B.paper,v.className),ownerState:R,externalForwardedProps:I,additionalProps:{elevation:k==="temporary"?x:0,square:!0,...k==="temporary"&&{role:"dialog","aria-modal":"true"}}}),[g,L]=W("docked",{elementType:jt,ref:n,className:Q(B.root,B.docked,p),ownerState:R,externalForwardedProps:I,additionalProps:w}),[Se,Ee]=W("transition",{elementType:gt,ownerState:R,externalForwardedProps:I,additionalProps:{in:P,direction:je[U],timeout:j,appear:b.current}}),te=t.jsx(O,{...l,children:f});if(k==="permanent")return t.jsx(g,{...L,children:te});const re=t.jsx(Se,{...Ee,children:te});return k==="persistent"?t.jsx(g,{...L,children:re}):t.jsx(F,{...X,children:re})}),Pt=be({themeId:Ve}),Ct=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")]),It=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"})),zt=S(t.jsx("path",{d:"M10 6 8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"})),Mt=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"})),Dt=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"})),Tt=S(t.jsx("path",{d:"m12 5.69 5 4.5V18h-2v-6H9v6H7v-7.81zM12 3 2 12h3v8h6v-6h2v6h6v-8h3z"})),Rt=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"})),Bt=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 _(e){return t.jsxs(Qe,{...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 Lt={light:"dark",dark:"auto",auto:"light"},ae={light:"Light mode (click for dark)",dark:"Dark mode (click for auto)",auto:"Auto mode (follows OS, click for light)"};function Ht(){const{mode:e,userChoice:r,setMode:n,allowUserToggle:o}=Ue();if(!o)return null;const s=r??e,a=Lt[s],i=s==="auto"?It:s==="dark"?Ze:qe;return t.jsx(A,{title:ae[s],children:t.jsx(N,{"aria-label":ae[s],onClick:()=>n(a),size:"small",children:t.jsx(i,{fontSize:"small"})})})}const ie="Visualization theme";function $t(){const e=Fe(),n=he().pathname.startsWith("/settings/theme");return t.jsx(A,{title:ie,children:t.jsx(N,{"aria-label":ie,onClick:()=>e("/settings/theme"),size:"small",color:n?"primary":"default",children:t.jsx(Bt,{fontSize:"small"})})})}function Y({label:e,onClick:r}){return t.jsx(Xe,{clickable:!0,onClick:r,label:e,size:"small","aria-label":`Navigate to ${e}`,sx:n=>({backgroundColor:"transparent",border:`1px solid ${n.palette.divider}`,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 Nt(){const e=fe(),r=e["*"],n=Z();return!e.environmentName&&!e.packageName&&!r?null:t.jsx(m,{sx:{display:"flex",alignItems:"center",minWidth:0},children:t.jsxs(ft,{"aria-label":"breadcrumb",separator:t.jsx(zt,{sx:{fontSize:14,color:"text.secondary"}}),children:[e.environmentName&&t.jsx(Y,{label:e.environmentName,onClick:o=>n(`/${e.environmentName}/`,o)}),e.packageName&&t.jsx(Y,{label:e.packageName,onClick:o=>n(`/${e.environmentName}/${e.packageName}/`,o)}),r&&t.jsx(Y,{label:r,onClick:o=>n(`/${e.environmentName}/${e.packageName}/${r}`,o)})]})})}const At=260,Ot=64;function ke({isCollapsed:e,onToggleCollapse:r,logoHeader:n}){return t.jsxs(m,{sx:{height:"100dvh",width:e?Ot:At,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(Wt,{isCollapsed:e,onToggleCollapse:r,logoHeader:n}),t.jsxs(m,{sx:{flex:1,overflowY:"auto",overflowX:"hidden",py:1},children:[t.jsx(Vt,{isCollapsed:e}),t.jsx(Qt,{isCollapsed:e})]}),t.jsx(Ut,{isCollapsed:e})]})}function Wt({isCollapsed:e,onToggleCollapse:r,logoHeader:n}){const o=Z();return n?t.jsxs(m,{sx:{height:56,display:"flex",alignItems:"center",justifyContent:"space-between",px:e?0:2,flexShrink:0},children:[n,t.jsx(N,{size:"small",onClick:r,"aria-label":e?"Expand sidebar":"Collapse sidebar",children:t.jsx(_,{fontSize:"small"})})]}):t.jsxs(m,{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(m,{onClick:s=>o("/",s),sx:{display:"flex",alignItems:"center",gap:1,cursor:"pointer",minWidth:0},children:[t.jsx(m,{component:"img",src:"/logo.svg",alt:"Malloy",sx:{width:24,height:24,flexShrink:0}}),!e&&t.jsx(G,{variant:"subtitle1",sx:{color:"text.primary",fontWeight:500,letterSpacing:"-0.025em",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:"Malloy Publisher"})]}),t.jsx(A,{title:e?"Expand sidebar":"Collapse sidebar",placement:"right",children:t.jsx(N,{size:"small",onClick:r,"aria-label":e?"Expand sidebar":"Collapse sidebar",children:t.jsx(_,{fontSize:"small"})})})]})}function Vt({isCollapsed:e}){const n=he().pathname==="/";return t.jsx(q,{sx:{py:0},children:t.jsx(we,{icon:t.jsx(Tt,{fontSize:"small"}),label:"Home",to:"/",selected:n,isCollapsed:e})})}function Qt({isCollapsed:e}){const{apiClients:r}=Ye(),n=fe(),{data:o}=_e({queryKey:["environments"],queryFn:()=>r.environments.listEnvironments()}),s=o?.data??[];return s.length===0?null:t.jsxs(m,{sx:{mt:1},children:[!e&&t.jsx(G,{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(we,{icon:t.jsx(Dt,{fontSize:"small"}),label:i,to:`/${i}`,selected:n.environmentName===i,isCollapsed:e},i)})})]})}function Ut({isCollapsed:e}){const r=[{label:"Malloy Docs",href:se.docsHome,icon:t.jsx(Ct,{fontSize:"small"}),external:!0},{label:"Publisher Docs",href:se.publishing,icon:t.jsx(Rt,{fontSize:"small"}),external:!0},{label:"Publisher API",href:"/api-doc.html",icon:t.jsx(Mt,{fontSize:"small"}),external:!1}];return t.jsx(q,{sx:{py:1},children:r.map(n=>t.jsx(Ft,{label:n.label,href:n.href,icon:n.icon,external:n.external,isCollapsed:e},n.label))})}function we({icon:e,label:r,to:n,selected:o,isCollapsed:s}){const a=Z(),i=t.jsxs(xe,{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(A,{title:r,placement:"right",children:t.jsx(m,{children:i})}):i}function Ft({label:e,href:r,icon:n,external:o,isCollapsed:s}){const a=t.jsxs(xe,{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(A,{title:e,placement:"right",children:t.jsx(m,{children:a})}):a}function Xt({open:e,onClose:r,logoHeader:n}){return t.jsx(Et,{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 Kt({headerProps:e}){const r=J(),n=Pt(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(m,{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(m,{component:"main",sx:{flex:1,display:"flex",flexDirection:"column",minWidth:0},children:[t.jsxs(m,{sx:{flexShrink:0,display:"flex",alignItems:"center",justifyContent:"space-between",height:Ke.headerHeight,px:{xs:1,md:3},backgroundColor:"background.default"},children:[t.jsx(m,{sx:{display:{xs:"flex",md:"none"},alignItems:"center",mr:1},children:t.jsx(N,{size:"small",onClick:()=>s(!0),"aria-label":"Open navigation",children:t.jsx(_,{fontSize:"small"})})}),t.jsx(m,{sx:{flex:1,minWidth:0,display:"flex",alignItems:"center"},children:t.jsx(Nt,{})}),t.jsxs(m,{id:"header-actions-portal",sx:{display:"flex",alignItems:"center",flexShrink:0,gap:1},children:[t.jsx($t,{}),t.jsx(Ht,{}),e?.endCap]})]}),t.jsx(m,{sx:{flex:1,overflow:"auto",minWidth:320,minHeight:0},children:t.jsx(u.Suspense,{fallback:t.jsx(Je,{}),children:t.jsx(Ge,{})})})]}),t.jsx(Xt,{open:o,onClose:()=>s(!1),logoHeader:e?.logoHeader})]})}export{Kt as default};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index.es-
|
|
2
|
-
import{c as W,j as a,Q as f,r as x,a1 as v,H as b,J as $,a2 as k,L as i,a3 as m,a4 as y,a5 as _,a6 as L,a7 as p,a8 as N,a9 as U,aa as R,a0 as D,ab as F,K as I,U as S,ac as T,ad as w,ae as M,T as j,af as h,ag as O}from"./index-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index.es-u5PRRTzT.js","assets/index-Dz4y_2PE.js","assets/index-DUqldpo0.css","assets/ToggleButtonGroup-BuhURn8v.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{c as W,j as a,Q as f,r as x,a1 as v,H as b,J as $,a2 as k,L as i,a3 as m,a4 as y,a5 as _,a6 as L,a7 as p,a8 as N,a9 as U,aa as R,a0 as D,ab as F,K as I,U as S,ac as T,ad as w,ae as M,T as j,af as h,ag as O}from"./index-Dz4y_2PE.js";const A=W(a.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"}));function E(e,s){const n=f();return x.useCallback((t,r)=>{const l=new URLSearchParams(t.givens).toString(),c=encodeURIComponent(e),d=encodeURIComponent(s),o=encodeURIComponent(t.dashboard);n(`/${c}/${d}/dashboards/${o}`+(l?`?${l}`:""),r)},[n,e,s])}function z({environmentName:e,packageName:s,dashboardName:n}){const{params:t,onGivensChange:r}=v(),l=E(e,s),c=b(),{pathname:d}=$(),o=x.useMemo(()=>k({environmentName:e,packageName:s,dashboardName:n}),[e,s,n]);return x.useEffect(()=>{const u=()=>void N(()=>import("./index.es-u5PRRTzT.js"),__vite__mapDeps([0,1,2,3])),g=window.requestIdleCallback;if(g){const P=g(u);return()=>window.cancelIdleCallback?.(P)}const C=setTimeout(u,1500);return()=>clearTimeout(C)},[]),a.jsxs(i,{sx:{p:3,maxWidth:1600,mx:"auto"},children:[a.jsx(m,{label:s,href:`/${e}/${s}`,onClick:()=>c(`/${e}/${s}`)}),a.jsx(y,{children:a.jsx(_,{label:"Edit",icon:a.jsx(A,{}),onClick:()=>c(`${d.replace(/\/$/,"")}/edit`)})}),a.jsx(L,{resourceUri:p({environmentName:e,packageName:s}),dashboard:n,givens:t,onGivensChange:r,onNavigate:l,onEvent:o,maxResultSize:1024*1024})]})}const G=U.lazy(()=>N(()=>import("./index.es-u5PRRTzT.js"),__vite__mapDeps([0,1,2,3])).then(e=>({default:e.DashboardEditor})));function Q({environmentName:e,packageName:s,dashboardName:n}){const t=b(),{pathname:r}=$(),l=r.replace(/\/edit\/?$/,""),c=x.useMemo(()=>k({environmentName:e,packageName:s,dashboardName:n}),[e,s,n]);return a.jsxs(i,{sx:{p:3,maxWidth:1600,mx:"auto"},children:[a.jsx(m,{label:s,href:`/${e}/${s}`,onClick:()=>t(`/${e}/${s}`)}),a.jsx(x.Suspense,{fallback:a.jsxs(R,{sx:{gap:2},children:[a.jsx(y,{}),a.jsx(D,{text:"Opening the builder…"})]}),children:a.jsx(G,{resourceUri:p({environmentName:e,packageName:s}),dashboard:n,onExit:()=>t(l),onEvent:c})})]})}function V({environmentName:e,packageName:s,notebookPath:n}){const{params:t,onGivensChange:r}=v(),l=E(e,s),c=f();return a.jsxs(i,{sx:{p:3,maxWidth:1200,mx:"auto"},children:[a.jsx(m,{label:s,href:`/${e}/${s}`,onClick:d=>c(`/${e}/${s}`,d)}),a.jsx(F,{resourceUri:p({environmentName:e,packageName:s,modelPath:n}),maxResultSize:1024*1024,givens:t,onGivensChange:r,onNavigate:c,onDrillNavigate:l})]})}function B(){const e=I(),s=e["*"],{server:n}=S(),t=f();if(!e.environmentName)return a.jsx("div",{children:a.jsx("h2",{children:"Missing environment name"})});if(!e.packageName)return a.jsx("div",{children:a.jsx("h2",{children:"Missing package name"})});const r={p:3,maxWidth:1200,mx:"auto"};if(s?.startsWith("dashboards/")&&!s.endsWith(".malloy")&&!s.endsWith(".malloynb")){const o=s.slice(11);return o.endsWith("/edit")?a.jsx(Q,{environmentName:e.environmentName,packageName:e.packageName,dashboardName:o.slice(0,-5)}):a.jsx(z,{environmentName:e.environmentName,packageName:e.packageName,dashboardName:o})}if(s?.startsWith("data-apps/")&&!s.endsWith(".malloy")&&!s.endsWith(".malloynb")){const o=s.slice(10),u=p({environmentName:e.environmentName,packageName:e.packageName,modelPath:o});return a.jsxs(i,{sx:r,children:[a.jsx(m,{label:e.packageName,href:`/${e.environmentName}/${e.packageName}`,onClick:g=>t(`/${e.environmentName}/${e.packageName}`,g)}),a.jsx(T,{resourceUri:u})]})}const l=p({environmentName:e.environmentName,packageName:e.packageName,modelPath:s});if(s?.endsWith(".malloy"))return a.jsxs(i,{sx:r,children:[a.jsx(m,{label:e.packageName,href:`/${e.environmentName}/${e.packageName}`,onClick:o=>t(`/${e.environmentName}/${e.packageName}`,o)}),a.jsx(w,{resourceUri:l,runOnDemand:!0,maxResultSize:512*1024})]});if(s?.endsWith(".malloynb"))return a.jsx(V,{environmentName:e.environmentName,packageName:e.packageName,notebookPath:s});const c=/\.[^./]+$/.test(s??""),d=M({server:n,environmentName:e.environmentName,packageName:e.packageName,path:s??""});return a.jsxs(i,{sx:r,children:[a.jsx(m,{label:e.packageName,href:`/${e.environmentName}/${e.packageName}`,onClick:o=>t(`/${e.environmentName}/${e.packageName}`,o)}),a.jsx(j,{variant:"h6",sx:{fontWeight:600},children:"Nothing to open at this path"}),a.jsxs(j,{variant:"body2",color:"text.secondary",sx:{mt:1},children:[a.jsx(i,{component:"span",sx:{fontFamily:h},children:s})," ","does not name a"," ",a.jsx(i,{component:"span",sx:{fontFamily:h},children:".malloy"})," ","or"," ",a.jsx(i,{component:"span",sx:{fontFamily:h},children:".malloynb"})," ","file in package"," ",a.jsx(i,{component:"span",sx:{fontFamily:h},children:e.packageName}),". This address opens"," ",a.jsx(i,{component:"span",sx:{fontFamily:h},children:".malloy"})," ","and"," ",a.jsx(i,{component:"span",sx:{fontFamily:h},children:".malloynb"})," ","files."]}),c&&a.jsxs(j,{variant:"body2",color:"text.secondary",sx:{mt:1},children:["A file from the package's"," ",a.jsx(i,{component:"span",sx:{fontFamily:h},children:"public/"})," ","directory is served at ",a.jsx(O,{href:d,children:d}),"."]}),a.jsx(j,{variant:"body2",color:"text.secondary",sx:{mt:1},children:"The package lists its models, notebooks, and data apps."})]})}export{B as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{K as r,Q as t,j as e,a7 as c,ah as o}from"./index-
|
|
1
|
+
import{K as r,Q as t,j as e,a7 as c,ah as o}from"./index-Dz4y_2PE.js";function h(){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{h as default};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-
|
|
2
|
-
import{j as D,L as oe,r as p,az as ce,F as he,n as ue,aA as me,ao as be,aB as H,a8 as J,aC as ye,aD as fe,aE as pe,aF as ge,aG as ae}from"./index-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-BELjGKhI.js","assets/index-Dz4y_2PE.js","assets/index-DUqldpo0.css","assets/index-w_0OQJgZ.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{j as D,L as oe,r as p,az as ce,F as he,n as ue,aA as me,ao as be,aB as H,a8 as J,aC as ye,aD as fe,aE as pe,aF as ge,aG as ae}from"./index-Dz4y_2PE.js";const v="publisher-drill";function ve(e,r){const t=new Set;let o;try{o=e.getMetadata()?.getAllFields()??[]}catch{return t}const l=new Set;for(const a of o)!a||r(a)||a.tag?.tag("hidden")===void 0&&l.add(a.tag?.text("label")??a.name);for(const a of o){if(!a||!r(a))continue;const n=a.tag?.text("label")??a.name;l.has(n)||t.add(n)}return t}function M(e){const r=/^\s*(\d+)/.exec(e.style?.gridColumn??"");return r?r[1]:void 0}function we(e,r){if(r.size!==0)for(const t of e.querySelectorAll(".malloy-table")){const o=n=>n.closest(".malloy-table")===t,l=new Set;for(const n of t.querySelectorAll(".column-cell.th")){if(!o(n))continue;const i=(n.textContent??"").replace(/\u200b/g,"").trim(),f=M(n);f&&r.has(i)&&l.add(f)}if(l.size===0)continue;const a=new Set;for(const n of t.querySelectorAll(`.${v}[tabindex="0"]`)){if(!o(n))continue;const i=M(n);i&&(a.has(i)?n.tabIndex=-1:a.add(i))}for(const n of t.querySelectorAll(".column-cell.td")){if(!o(n))continue;const i=M(n),f=!n.querySelector(".value-null")&&(n.textContent??"").trim()!=="";if(i&&f&&l.has(i)&&!n.querySelector(".malloy-table")){if(n.classList.add(v),n.tabIndex===0)a.add(i);else{const m=a.has(i);m||a.add(i),n.tabIndex=m?-1:0}n.setAttribute("role","button")}}}}function ke(e){const r=e.closest(".malloy-table"),t=M(e);return!r||!t?[]:Array.from(r.querySelectorAll(`.${v}`)).filter(o=>o.closest(".malloy-table")===r&&M(o)===t)}function ne(e,r){const t=ke(e),o=t.indexOf(e);if(o===-1)return;const l=r==="first"?t[0]:r==="last"?t[t.length-1]:t[Math.min(Math.max(o+r,0),t.length-1)];if(l){for(const a of t)a.tabIndex=a===l?0:-1;return l}}function xe(e){return{background:e.dashboardRoot,tableBackground:e.tableBackground,tableHeaderColor:e.tableHeader,tableBodyColor:e.tableBody,tableBorder:e.border,tablePinnedBackground:e.tableHeaderBackground,tablePinnedBorder:e.pinnedBorder,tableFontSize:`${e.font.size}px`,fontFamily:e.font.family,mapColor:e.mapColor}}function Ce(e){const{foreground:r,axisFaint:t,font:o}=e,l={background:e.background,font:o.family,title:{color:r,font:o.family},axis:{labelColor:r,titleColor:r,domainColor:t,tickColor:t,gridColor:t,labelFont:o.family,titleFont:o.family},legend:{labelColor:r,titleColor:r,labelFont:o.family,titleFont:o.family},header:{labelColor:r,titleColor:r},range:{category:e.series}};return a=>l}function Ee(e){if(!e)return;const r=e.tag("theme");if(!r)return;const t={},o=r.tag("palette");if(o){const a={},n=o.textArray("series");n&&n.length>0&&(a.series=n);for(const i of ce){const f=o.tag(i);if(!f)continue;const m={},w=f.text("light"),E=f.text("dark");w&&(m.light=w),E&&(m.dark=E),Object.keys(m).length>0&&(a[i]=m)}Object.keys(a).length>0&&(t.palette=a)}const l=r.tag("font");if(l){const a={},n=l.text("family");n&&(a.family=n);const i=l.numeric("size");typeof i=="number"&&Number.isFinite(i)&&(a.size=i),Object.keys(a).length>0&&(t.font=a)}return Object.keys(t).length>0?t:void 0}const Ae=async(e,r)=>{if(typeof window>"u")throw new Error("MalloyRenderer can only be used in browser environment");const{MalloyRenderer:t}=await J(async()=>{const{MalloyRenderer:o}=await import("./index-DSoCUF-f.js");return{MalloyRenderer:o}},[]);return new t({onClick:r,vegaConfigOverride:Ce(e),theme:xe(e),onError:o=>{console.error("Error rendering visualization:",typeof o,o)}}).createViz()};typeof window<"u"&&J(()=>import("./index-DSoCUF-f.js"),[]);async function Se(e){if(!e||typeof e!="object")return;const r=e,t=[...Array.isArray(r.model_annotations)?r.model_annotations:[],...Array.isArray(r.source_annotations)?r.source_annotations:[],...Array.isArray(r.annotations)?r.annotations:[]].map(l=>typeof l?.value=="string"?l.value:void 0).filter(l=>!!l);if(t.length===0)return;let o;try{({parseAnnotation:o}=await J(()=>import("./index-BELjGKhI.js").then(l=>l.i),__vite__mapDeps([0,1,2,3])))}catch{return}try{const{tag:l}=o(t);return Ee(l)}catch(l){console.warn("Failed to parse # theme.* annotations; chart will render with the shell theme.",{error:l,lines:t});return}}function _e(e,r,t){const o=ye(r,t);for(const[l,a]of Object.entries(o))e.style.setProperty(l,a)}const Re=`
|
|
3
3
|
/* Card geometry, through the renderer's OWN theme vars rather than over the top
|
|
4
4
|
of them. It declares --malloy-theme--dashboard-* on .malloy-render itself and
|
|
5
5
|
passes each through to the --malloy-render--* the card CSS reads, so a value
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{aj as o,j as r,ak as s,aa as a,L as n,T as t}from"./index-
|
|
1
|
+
import{aj as o,j as r,ak as s,aa as a,L as n,T as t}from"./index-Dz4y_2PE.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(a,{sx:{m:"auto",flexDirection:"column"},children:[r.jsx(n,{sx:{height:"300px"}}),r.jsx("img",{src:"/error.png"}),r.jsx(t,{variant:"subtitle1",children:"An unexpected error occurred"})]})})}export{x as default};
|