@malloy-publisher/app 0.9.10 → 0.9.12
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 +121 -45
- package/dist/assets/{EnvironmentPage-DfL-2Fy5.js → EnvironmentPage-BFcCRfvE.js} +1 -1
- package/dist/assets/{HomePage-Cc5z85GD.js → HomePage-C0LnSonK.js} +1 -1
- package/dist/assets/MainPage-D3EM60u0.js +1 -0
- package/dist/assets/ModelPage-B1wvZV7r.js +2 -0
- package/dist/assets/PackagePage-QZ59dwip.js +1 -0
- package/dist/assets/RenderedResult-CDiXJAh9.es-C9BYYEfH.js +153 -0
- package/dist/assets/{RouteError-Bc7-ukP7.js → RouteError-v8LP_Q9x.js} +1 -1
- package/dist/assets/ThemeEditorPage-B5l2nzAq.js +1 -0
- package/dist/assets/ToggleButtonGroup-C6Lespxy.js +1 -0
- package/dist/assets/{documentRoutes-CvCc_EZs.js → documentRoutes-xv0fP4cS.js} +1 -1
- package/dist/assets/editPageMounted-COiBq84S.js +2 -0
- package/dist/assets/index-5On9Gkpl.js +480 -0
- package/dist/assets/{index-DugQbYOk.js → index-BG7MWz9o.js} +1 -1
- package/dist/assets/{index-DnRXl1Nu.js → index-Dynd6zeI.js} +1 -1
- package/dist/assets/{index-Ddy-NxB_.js → index-mIetEOsB.js} +1 -1
- package/dist/assets/index.es-FZZk_rEa.js +143 -0
- package/dist/index.html +1 -1
- package/package.json +2 -2
- package/dist/assets/MainPage-Cv63Ip_P.js +0 -1
- package/dist/assets/ModelPage-DvyYSgri.js +0 -2
- package/dist/assets/PackagePage-BDzBa7qB.js +0 -1
- package/dist/assets/RenderedResult-Dp1Qdajz.es-woQDtiv_.js +0 -153
- package/dist/assets/ThemeEditorPage-DShPXmlS.js +0 -1
- package/dist/assets/ToggleButtonGroup-WO-9ZUmS.js +0 -1
- package/dist/assets/index-BvSbJtsT.js +0 -483
- package/dist/assets/index.es-BhMC9nt1.js +0 -195
package/dist/api-doc.yaml
CHANGED
|
@@ -554,6 +554,8 @@ paths:
|
|
|
554
554
|
$ref: "#/components/schemas/PostgresConnection"
|
|
555
555
|
mysqlConnection:
|
|
556
556
|
$ref: "#/components/schemas/MysqlConnection"
|
|
557
|
+
sqlserverConnection:
|
|
558
|
+
$ref: "#/components/schemas/SqlserverConnection"
|
|
557
559
|
bigqueryConnection:
|
|
558
560
|
$ref: "#/components/schemas/BigqueryConnection"
|
|
559
561
|
snowflakeConnection:
|
|
@@ -910,6 +912,8 @@ paths:
|
|
|
910
912
|
application/json:
|
|
911
913
|
schema:
|
|
912
914
|
$ref: "#/components/schemas/QueryData"
|
|
915
|
+
"400":
|
|
916
|
+
$ref: "#/components/responses/BadRequest"
|
|
913
917
|
"401":
|
|
914
918
|
$ref: "#/components/responses/Unauthorized"
|
|
915
919
|
"403":
|
|
@@ -968,6 +972,8 @@ paths:
|
|
|
968
972
|
application/json:
|
|
969
973
|
schema:
|
|
970
974
|
$ref: "#/components/schemas/TemporaryTable"
|
|
975
|
+
"400":
|
|
976
|
+
$ref: "#/components/responses/BadRequest"
|
|
971
977
|
"401":
|
|
972
978
|
$ref: "#/components/responses/Unauthorized"
|
|
973
979
|
"404":
|
|
@@ -1306,6 +1312,8 @@ paths:
|
|
|
1306
1312
|
application/json:
|
|
1307
1313
|
schema:
|
|
1308
1314
|
$ref: "#/components/schemas/QueryData"
|
|
1315
|
+
"400":
|
|
1316
|
+
$ref: "#/components/responses/BadRequest"
|
|
1309
1317
|
"401":
|
|
1310
1318
|
$ref: "#/components/responses/Unauthorized"
|
|
1311
1319
|
"403":
|
|
@@ -1370,6 +1378,8 @@ paths:
|
|
|
1370
1378
|
application/json:
|
|
1371
1379
|
schema:
|
|
1372
1380
|
$ref: "#/components/schemas/TemporaryTable"
|
|
1381
|
+
"400":
|
|
1382
|
+
$ref: "#/components/responses/BadRequest"
|
|
1373
1383
|
"401":
|
|
1374
1384
|
$ref: "#/components/responses/Unauthorized"
|
|
1375
1385
|
"404":
|
|
@@ -1777,7 +1787,9 @@ paths:
|
|
|
1777
1787
|
on a tag line, outside a string. Text without one is refused with 400.
|
|
1778
1788
|
- REPLACE (with `expectedHash`): only a file the package currently reads
|
|
1779
1789
|
as an editable report: a tagged `.malloy` report of either layout,
|
|
1780
|
-
including a tagged grid report that has no tiles yet
|
|
1790
|
+
including a tagged grid report that has no tiles yet, and a file
|
|
1791
|
+
whose tag makes no report (a `kind=` tag, or the retired `run:`
|
|
1792
|
+
cell format), so it can be rewritten as tiles. A model, an
|
|
1781
1793
|
untagged file, a `.malloynb`, the root `index.malloy` and anything in
|
|
1782
1794
|
`public/` cannot be overwritten, wherever they live, and answer 400.
|
|
1783
1795
|
|
|
@@ -1785,7 +1797,9 @@ paths:
|
|
|
1785
1797
|
identified by its path, so a taken basename is not refused.
|
|
1786
1798
|
|
|
1787
1799
|
The text is compiled first, as the file, and refused with its problems
|
|
1788
|
-
when it does not compile
|
|
1800
|
+
when it does not compile, or when its tag makes no report (for
|
|
1801
|
+
example a linear tag with no `tiles`, `report-cells-removed`);
|
|
1802
|
+
nothing is written. The write is atomic (a
|
|
1789
1803
|
sibling temporary file renamed over the target). If the reload that
|
|
1790
1804
|
follows fails to compile the package, the previous text is restored (or
|
|
1791
1805
|
a new file removed) and the package reloaded again, so a save never
|
|
@@ -2065,10 +2079,13 @@ paths:
|
|
|
2065
2079
|
may import.
|
|
2066
2080
|
|
|
2067
2081
|
A report's `layout` is decided by its tags, first match wins: the
|
|
2068
|
-
tag's `layout=` (`grid` or `linear`); else
|
|
2069
|
-
|
|
2070
|
-
|
|
2071
|
-
`
|
|
2082
|
+
tag's `layout=` (`grid` or `linear`); else grid for a query-level
|
|
2083
|
+
`# artifact`; else grid for a model-level tag that lists `tiles` or
|
|
2084
|
+
carries a `dashboard { … }` grid tag; else linear. A tag that sets
|
|
2085
|
+
`kind=` is no report (`report-kind-removed`), and neither is a linear
|
|
2086
|
+
tag that lists no `tiles`: that is the retired `run:` cell format
|
|
2087
|
+
(`report-cells-removed`). An empty `tiles=[]` is a linear report with
|
|
2088
|
+
no tiles yet.
|
|
2072
2089
|
|
|
2073
2090
|
A report is identified by its `path`. `name`, its basename, is a
|
|
2074
2091
|
display label only: two reports may share one.
|
|
@@ -2125,15 +2142,13 @@ paths:
|
|
|
2125
2142
|
description: |
|
|
2126
2143
|
Everything a viewer needs to render one report, addressed by its path in
|
|
2127
2144
|
the package, including its extension, exactly as list-reports gives
|
|
2128
|
-
it (`sales/q3.malloy`). A report
|
|
2145
|
+
it (`sales/q3.malloy`). A `.malloy` report, of either layout, carries the
|
|
2129
2146
|
manifest fields (`tiles` or `query`, `dashboardColumns`,
|
|
2130
2147
|
`startingGivens`, `autorun`, `givens`): its tiles run through the model
|
|
2131
|
-
query endpoint with `givens`, using `path` as the model. A
|
|
2132
|
-
|
|
2133
|
-
|
|
2134
|
-
|
|
2135
|
-
`query` and `path` as the model; a `.malloynb`'s through the
|
|
2136
|
-
deprecated execute-notebook-cell.
|
|
2148
|
+
query endpoint with `givens`, using `path` as the model. A
|
|
2149
|
+
`.malloynb`, the one cell format left, carries `notebook` instead: its
|
|
2150
|
+
cells as get-notebook returned them, run through the deprecated
|
|
2151
|
+
execute-notebook-cell.
|
|
2137
2152
|
parameters:
|
|
2138
2153
|
- name: environmentName
|
|
2139
2154
|
in: path
|
|
@@ -3959,11 +3974,8 @@ components:
|
|
|
3959
3974
|
with that error instead of opening. The per-file report findings
|
|
3960
3975
|
each name their line and the fix and carry a `code`; they are
|
|
3961
3976
|
computed at discovery and are also returned by `/compile` at file
|
|
3962
|
-
and package scope.
|
|
3963
|
-
`notebook-
|
|
3964
|
-
(a statement or a tag above a served notebook's `## artifact`),
|
|
3965
|
-
`notebook-markdown-above-artifact` (a `(markdown)` annotation above
|
|
3966
|
-
it), `notebook-columns-conflict` (a tiled dashboard's
|
|
3977
|
+
and package scope. These codes are `error` and fail `/compile`:
|
|
3978
|
+
`notebook-columns-conflict` (a tiled dashboard's
|
|
3967
3979
|
`dashboard_columns` disagrees with `dashboard { columns }`),
|
|
3968
3980
|
`notebook-markdown-opener-text` (more than a
|
|
3969
3981
|
name after `(markdown)` on a block's opener),
|
|
@@ -3973,10 +3985,12 @@ components:
|
|
|
3973
3985
|
(the reader could not read a linear report's cells), plus
|
|
3974
3986
|
`report-kind-removed` (a tag that sets `kind=`, which is no longer
|
|
3975
3987
|
read, so the file is not a report; the finding names the `layout=`
|
|
3976
|
-
to write)
|
|
3977
|
-
`
|
|
3978
|
-
|
|
3979
|
-
|
|
3988
|
+
to write), `report-cells-removed` (a linear tag that lists no
|
|
3989
|
+
`tiles`, the retired `run:` cell format, so the file is not a
|
|
3990
|
+
report; the fix is to list its tiles in `tiles=[…]`) and
|
|
3991
|
+
`report-layout-unknown` (a `layout=` other than `grid` or
|
|
3992
|
+
`linear`). The rest are `warn` (a mistyped `(markdown)` opener, a
|
|
3993
|
+
block that never closes, and similar).
|
|
3980
3994
|
Skill and agent findings, all `warn`: a package skill under
|
|
3981
3995
|
`skills/` that is not served (unreadable or linked-out `SKILL.md`,
|
|
3982
3996
|
a frontmatter `name` that is not its directory name, a `skills/`
|
|
@@ -4983,15 +4997,15 @@ components:
|
|
|
4983
4997
|
description: >-
|
|
4984
4998
|
Human title: the artifact tag's `title`, else the first line of the
|
|
4985
4999
|
`"` notes above the tag, else,
|
|
4986
|
-
for a
|
|
5000
|
+
for a `.malloynb`, its first markdown heading, else `name`.
|
|
4987
5001
|
description:
|
|
4988
5002
|
type: string
|
|
4989
5003
|
description: The report's doc comment, when it has one.
|
|
4990
5004
|
editable:
|
|
4991
5005
|
type: boolean
|
|
4992
5006
|
description: >-
|
|
4993
|
-
Whether the builder opens it as it is:
|
|
4994
|
-
for a
|
|
5007
|
+
Whether the builder opens it as it is: true for a `.malloy` report,
|
|
5008
|
+
false for a `.malloynb`.
|
|
4995
5009
|
error:
|
|
4996
5010
|
type: string
|
|
4997
5011
|
description: >-
|
|
@@ -5000,11 +5014,10 @@ components:
|
|
|
5000
5014
|
|
|
5001
5015
|
ReportManifest:
|
|
5002
5016
|
description: |
|
|
5003
|
-
A `Report` plus what a viewer needs to draw it. A report
|
|
5004
|
-
|
|
5005
|
-
`
|
|
5006
|
-
|
|
5007
|
-
linear report written as `run:` cells, or a `.malloynb`, carries
|
|
5017
|
+
A `Report` plus what a viewer needs to draw it. A `.malloy` report, of
|
|
5018
|
+
either layout, carries `tiles`, `dashboardColumns`, `startingGivens`,
|
|
5019
|
+
`autorun` and `givens`, whose tiles and suggest queries run through
|
|
5020
|
+
`POST …/models/{path}/query` with `givens`. A `.malloynb` carries
|
|
5008
5021
|
`notebook` instead.
|
|
5009
5022
|
allOf:
|
|
5010
5023
|
- $ref: "#/components/schemas/Report"
|
|
@@ -5014,7 +5027,8 @@ components:
|
|
|
5014
5027
|
type: array
|
|
5015
5028
|
description: >-
|
|
5016
5029
|
The report's tiles, each run as its own query (or shown as text),
|
|
5017
|
-
in order. Absent on a
|
|
5030
|
+
in order. Absent on a `.malloynb`, and on a report that failed
|
|
5031
|
+
to compile.
|
|
5018
5032
|
items:
|
|
5019
5033
|
$ref: "#/components/schemas/ReportTile"
|
|
5020
5034
|
dashboardColumns:
|
|
@@ -5049,12 +5063,9 @@ components:
|
|
|
5049
5063
|
allOf:
|
|
5050
5064
|
- $ref: "#/components/schemas/ReportCells"
|
|
5051
5065
|
description: >-
|
|
5052
|
-
For a
|
|
5053
|
-
|
|
5054
|
-
|
|
5055
|
-
`query`; a `.malloynb`'s with execute-notebook-cell. Absent on a
|
|
5056
|
-
report written as tiles, and on a
|
|
5057
|
-
report that failed to compile.
|
|
5066
|
+
For a `.malloynb`: its cells and model, each cell run with
|
|
5067
|
+
execute-notebook-cell. Absent on a `.malloy` report, and on a
|
|
5068
|
+
`.malloynb` that failed to compile.
|
|
5058
5069
|
|
|
5059
5070
|
ReportTile:
|
|
5060
5071
|
type: object
|
|
@@ -5151,8 +5162,8 @@ components:
|
|
|
5151
5162
|
ReportCells:
|
|
5152
5163
|
type: object
|
|
5153
5164
|
description: >-
|
|
5154
|
-
A linear report
|
|
5155
|
-
and its model.
|
|
5165
|
+
A `.malloynb`, or a linear `.malloy` report read as cells (its
|
|
5166
|
+
definitions, then its tiles): its cells, unexecuted, and its model.
|
|
5156
5167
|
properties:
|
|
5157
5168
|
type:
|
|
5158
5169
|
type: string
|
|
@@ -5481,8 +5492,7 @@ components:
|
|
|
5481
5492
|
description: >-
|
|
5482
5493
|
The tile layout of a linear report written as one (`## artifact {
|
|
5483
5494
|
layout=linear tiles=[…] }`), in the shape a dashboard has, with
|
|
5484
|
-
`layout` `linear` and one column. Absent on a
|
|
5485
|
-
cells. Its tiles run through the model query endpoint at
|
|
5495
|
+
`layout` `linear` and one column. Absent on a `.malloynb`. Its tiles run through the model query endpoint at
|
|
5486
5496
|
`modelPath`; `notebookCells` carries the same content as cells for
|
|
5487
5497
|
readers that do not draw a layout.
|
|
5488
5498
|
|
|
@@ -5650,6 +5660,13 @@ components:
|
|
|
5650
5660
|
host's to set. The builder withholds its control only when it edits
|
|
5651
5661
|
a document held as text; a saved dashboard or notebook renders it
|
|
5652
5662
|
as before. Absent otherwise.
|
|
5663
|
+
required:
|
|
5664
|
+
type: boolean
|
|
5665
|
+
description: >-
|
|
5666
|
+
True when the given declares no default, so a query that reads it
|
|
5667
|
+
fails until a value is supplied ("Given 'X' has no value and no
|
|
5668
|
+
default"). A report's reader asks for it before running the tiles
|
|
5669
|
+
that read it, rather than showing that error. Absent otherwise.
|
|
5653
5670
|
default:
|
|
5654
5671
|
type: string
|
|
5655
5672
|
description: The given's default value as a Malloy source literal
|
|
@@ -6405,6 +6422,7 @@ components:
|
|
|
6405
6422
|
trino,
|
|
6406
6423
|
databricks,
|
|
6407
6424
|
mysql,
|
|
6425
|
+
sqlserver,
|
|
6408
6426
|
duckdb,
|
|
6409
6427
|
motherduck,
|
|
6410
6428
|
ducklake,
|
|
@@ -6536,6 +6554,8 @@ components:
|
|
|
6536
6554
|
$ref: "#/components/schemas/DatabricksConnection"
|
|
6537
6555
|
mysqlConnection:
|
|
6538
6556
|
$ref: "#/components/schemas/MysqlConnection"
|
|
6557
|
+
sqlserverConnection:
|
|
6558
|
+
$ref: "#/components/schemas/SqlserverConnection"
|
|
6539
6559
|
duckdbConnection:
|
|
6540
6560
|
$ref: "#/components/schemas/DuckdbConnection"
|
|
6541
6561
|
motherduckConnection:
|
|
@@ -6704,6 +6724,58 @@ components:
|
|
|
6704
6724
|
type: string
|
|
6705
6725
|
description: MySQL password for authentication
|
|
6706
6726
|
|
|
6727
|
+
SqlserverConnection:
|
|
6728
|
+
type: object
|
|
6729
|
+
description: >-
|
|
6730
|
+
Microsoft SQL Server connection configuration: a SQL Server login over
|
|
6731
|
+
TCP. Field names are the connector's own (`@malloydata/db-sqlserver`),
|
|
6732
|
+
so a value here reaches the driver unchanged. The dialect is
|
|
6733
|
+
experimental upstream; Publisher accepts it on the model author's
|
|
6734
|
+
behalf, so a model needs no `##! experimental.dialect.sqlserver`
|
|
6735
|
+
pragma. The connection is read-only: a `#@ persist` on a SQL Server
|
|
6736
|
+
source is refused at load (see `RefusedSource.reason`).
|
|
6737
|
+
properties:
|
|
6738
|
+
server:
|
|
6739
|
+
type: string
|
|
6740
|
+
description: SQL Server host name or IP address
|
|
6741
|
+
port:
|
|
6742
|
+
type: integer
|
|
6743
|
+
description: TCP port; 1433 when omitted. Not used when `instanceName` is set.
|
|
6744
|
+
database:
|
|
6745
|
+
type: string
|
|
6746
|
+
description: Name of the database to open
|
|
6747
|
+
user:
|
|
6748
|
+
type: string
|
|
6749
|
+
description: SQL Server login name
|
|
6750
|
+
password:
|
|
6751
|
+
type: string
|
|
6752
|
+
description: SQL Server login password
|
|
6753
|
+
encrypt:
|
|
6754
|
+
type: boolean
|
|
6755
|
+
description: >-
|
|
6756
|
+
Encrypt the connection with TLS. On when omitted, as the driver
|
|
6757
|
+
defaults it; a server that requires encryption refuses a
|
|
6758
|
+
connection with it off.
|
|
6759
|
+
trustServerCertificate:
|
|
6760
|
+
type: boolean
|
|
6761
|
+
description: >-
|
|
6762
|
+
Accept a server certificate the client cannot verify, such as a
|
|
6763
|
+
self-signed one on a local or test server. Off when omitted. Leave
|
|
6764
|
+
it off for any server you do not control; a certificate the client
|
|
6765
|
+
cannot verify then fails the connection rather than being trusted.
|
|
6766
|
+
hostNameInCertificate:
|
|
6767
|
+
type: string
|
|
6768
|
+
description: >-
|
|
6769
|
+
The host name the server's certificate is issued to, when it is
|
|
6770
|
+
not `server` (a server reached by IP address, or through a
|
|
6771
|
+
tunnel). Checked against the certificate when `encrypt` is on and
|
|
6772
|
+
`trustServerCertificate` is off.
|
|
6773
|
+
instanceName:
|
|
6774
|
+
type: string
|
|
6775
|
+
description: >-
|
|
6776
|
+
A named instance, located through the SQL Browser service (UDP
|
|
6777
|
+
1434); `port` is then not used.
|
|
6778
|
+
|
|
6707
6779
|
GCSConnection:
|
|
6708
6780
|
type: object
|
|
6709
6781
|
description: Google Cloud Storage connection configuration for DuckDB
|
|
@@ -7735,6 +7807,7 @@ components:
|
|
|
7735
7807
|
authorize,
|
|
7736
7808
|
not_duckdb_portable,
|
|
7737
7809
|
public_surface_unknown,
|
|
7810
|
+
read_only_dialect,
|
|
7738
7811
|
]
|
|
7739
7812
|
description: >-
|
|
7740
7813
|
The bounded refusal reason. Only the compile-time reasons can
|
|
@@ -7745,11 +7818,14 @@ components:
|
|
|
7745
7818
|
`partition=` (`partition_without_storage`,
|
|
7746
7819
|
`partition_column_unknown`, `partition_column_not_public`),
|
|
7747
7820
|
`merge_key_scope_unresolved` (a `merge_key=` whose caller scope
|
|
7748
|
-
cannot be expressed over the stored table's own columns),
|
|
7821
|
+
cannot be expressed over the stored table's own columns),
|
|
7749
7822
|
`preaggregate_over_dynamic_source` (a rollup whose base is scoped by
|
|
7750
|
-
a given, which has no read-time re-application to put the term back)
|
|
7751
|
-
|
|
7752
|
-
|
|
7823
|
+
a given, which has no read-time re-application to put the term back),
|
|
7824
|
+
and `read_only_dialect` (a colocated `#@ persist` on a source whose
|
|
7825
|
+
dialect cannot create tables; SQL Server today, whose connection
|
|
7826
|
+
reports `canPersist: false`) — those being the only reasons the two
|
|
7827
|
+
compile-time eligibility asserts this collection is computed from
|
|
7828
|
+
produce.
|
|
7753
7829
|
|
|
7754
7830
|
|
|
7755
7831
|
`given_in_persisted_query` is raised by BOTH gates, for one
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{c as r,D as t,j as e,ab as i,aA as o}from"./index-5On9Gkpl.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{
|
|
1
|
+
import{c as t,j as o,x as a}from"./index-5On9Gkpl.js";function s(){const n=t();return o.jsx(a,{onClickEnvironment:n})}export{s as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as j,j as t,s as D,B as Pe,m as Q,e as ce,g as me,b as fe,r as h,u as ge,d as Ee,f as W,h as ye,T as J,i as K,k as Me,l as ze,n as Ie,o as be,p as Ce,q as De,t as de,v as Te,w as Be,y as A,z as H,M as Re,P as $e,A as Le,S as He,C as G,D as Z,E as Ne,U as Ae,F as Oe,G as pe,H as We,c as ee,I as u,J as Ve,K as Y,L as V,N as te,O as Fe,Q as Ue,R as ue,V as _e,W as re,X as ne,Y as oe,Z as Xe,_ as Ye,$ as qe,a0 as Qe}from"./index-5On9Gkpl.js";import{u as Je,l as he}from"./editPageMounted-COiBq84S.js";import{i as Ke,w as Ge,a as Ze}from"./documentRoutes-xv0fP4cS.js";const et=j(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"})),tt=D(Pe,{name:"MuiBreadcrumbCollapsed"})(Q(({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:ce(e.palette.grey[200],.12)}:{backgroundColor:ce(e.palette.grey[600],.12)}}}))),rt=D(et)({width:24,height:16});function nt(e){const{slots:r={},slotProps:o={},...n}=e,s=e;return t.jsx("li",{children:t.jsx(tt,{focusRipple:!0,...n,ownerState:s,children:t.jsx(rt,{as:r.CollapsedIcon,ownerState:s,...o.collapsedIcon})})})}function ot(e){return me("MuiBreadcrumbs",e)}const st=fe("MuiBreadcrumbs",["root","ol","li","separator"]),at=e=>{const{classes:r}=e;return ye({root:["root"],li:["li"],ol:["ol"],separator:["separator"]},ot,r)},it=D(J,{name:"MuiBreadcrumbs",slot:"Root",overridesResolver:(e,r)=>[{[`& .${st.li}`]:r.li},r.root]})({}),lt=D("ol",{name:"MuiBreadcrumbs",slot:"Ol"})({display:"flex",flexWrap:"wrap",alignItems:"center",padding:0,margin:0,listStyle:"none"}),ct=D("li",{name:"MuiBreadcrumbs",slot:"Separator"})({display:"flex",userSelect:"none",marginLeft:8,marginRight:8});function dt(e,r,o,n){return e.reduce((s,l,a)=>(a<e.length-1?s=s.concat(l,t.jsx(ct,{"aria-hidden":!0,className:r,ownerState:n,children:o},`separator-${a}`)):s.push(l),s),[])}const pt=h.forwardRef(function(r,o){const n=ge({props:r,name:"MuiBreadcrumbs"}),{children:s,className:l,component:a="nav",slots:d={},slotProps:x={},expandText:p="Show path",itemsAfterCollapse:m=1,itemsBeforeCollapse:b=1,maxItems:g=8,separator:k="/",...E}=n,[M,z]=h.useState(!1),v={...n,component:a,expanded:M,expandText:p,itemsAfterCollapse:m,itemsBeforeCollapse:b,maxItems:g,separator:k},I=at(v),T=Ee({elementType:d.CollapsedIcon,externalSlotProps:x.collapsedIcon,ownerState:v}),w=h.useRef(null),S=c=>{const P=()=>{z(!0);const y=w.current.querySelector("a[href],button,[tabindex]");y&&y.focus()};return b+m>=c.length?c:[...c.slice(0,b),t.jsx(nt,{"aria-label":p,slots:{CollapsedIcon:d.CollapsedIcon},slotProps:{collapsedIcon:T},onClick:P},"ellipsis"),...c.slice(c.length-m,c.length)]},B=h.Children.toArray(s).filter(c=>h.isValidElement(c)).map((c,P)=>t.jsx("li",{className:I.li,children:c},`child-${P}`));return t.jsx(it,{ref:o,component:a,color:"textSecondary",className:W(I.root,l),ownerState:v,...E,children:t.jsx(lt,{className:I.ol,ref:w,ownerState:v,children:dt(M||g&&B.length<=g?B:S(B),I.separator,k,v)})})});function ut(e,r,o){const n=r.getBoundingClientRect(),s=o&&o.getBoundingClientRect(),l=be(r);let a;if(r.fakeTransform)a=r.fakeTransform;else{const p=l.getComputedStyle(r);a=p.getPropertyValue("-webkit-transform")||p.getPropertyValue("transform")}let d=0,x=0;if(a&&a!=="none"&&typeof a=="string"){const p=a.split("(")[1].split(")")[0].split(",");d=parseInt(p[4],10),x=parseInt(p[5],10)}return e==="left"?s?`translateX(${s.right+d-n.left}px)`:`translateX(${l.innerWidth+d-n.left}px)`:e==="right"?s?`translateX(-${n.right-s.left-d}px)`:`translateX(-${n.left+n.width-d}px)`:e==="up"?s?`translateY(${s.bottom+x-n.top}px)`:`translateY(${l.innerHeight+x-n.top}px)`:s?`translateY(-${n.top-s.top+n.height-x}px)`:`translateY(-${n.top+n.height-x}px)`}function ht(e){return typeof e=="function"?e():e}function O(e,r,o){const n=ht(o),s=ut(e,r,n);s&&(r.style.webkitTransform=s,r.style.transform=s)}const xt=h.forwardRef(function(r,o){const n=K(),s={enter:n.transitions.easing.easeOut,exit:n.transitions.easing.sharp},l={enter:n.transitions.duration.enteringScreen,exit:n.transitions.duration.leavingScreen},{addEndListener:a,appear:d=!0,children:x,container:p,direction:m="down",easing:b=s,in:g,onEnter:k,onEntered:E,onEntering:M,onExit:z,onExited:v,onExiting:I,style:T,timeout:w=l,TransitionComponent:S=Me,...B}=r,c=h.useRef(null),P=ze(Ie(x),c,o),y=i=>f=>{i&&(f===void 0?i(c.current):i(c.current,f))},F=y((i,f)=>{O(m,i,p),De(i),k&&k(i,f)}),ae=y((i,f)=>{const L=de({timeout:w,style:T,easing:b},{mode:"enter"});i.style.webkitTransition=n.transitions.create("-webkit-transform",{...L}),i.style.transition=n.transitions.create("transform",{...L}),i.style.webkitTransform="none",i.style.transform="none",M&&M(i,f)}),R=y(E),$=y(I),C=y(i=>{const f=de({timeout:w,style:T,easing:b},{mode:"exit"});i.style.webkitTransition=n.transitions.create("-webkit-transform",f),i.style.transition=n.transitions.create("transform",f),O(m,i,p),z&&z(i)}),U=y(i=>{i.style.webkitTransition="",i.style.transition="",v&&v(i)}),_=i=>{a&&a(c.current,i)},N=h.useCallback(()=>{c.current&&O(m,c.current,p)},[m,p]);return h.useEffect(()=>{if(g||m==="down"||m==="right")return;const i=Ce(()=>{c.current&&O(m,c.current,p)}),f=be(c.current);return f.addEventListener("resize",i),()=>{i.clear(),f.removeEventListener("resize",i)}},[m,g,p]),h.useEffect(()=>{g||N()},[g,N]),t.jsx(S,{nodeRef:c,onEnter:F,onEntered:R,onEntering:ae,onExit:C,onExited:U,onExiting:$,addEndListener:_,appear:d,in:g,timeout:w,...B,children:(i,{ownerState:f,...L})=>h.cloneElement(x,{ref:P,style:{visibility:i==="exited"&&!g?"hidden":void 0,...T,...x.props.style},...L})})});function mt(e){return me("MuiDrawer",e)}fe("MuiDrawer",["root","docked","paper","anchorLeft","anchorRight","anchorTop","anchorBottom","paperAnchorLeft","paperAnchorRight","paperAnchorTop","paperAnchorBottom","paperAnchorDockedLeft","paperAnchorDockedRight","paperAnchorDockedTop","paperAnchorDockedBottom","modal"]);const ve=(e,r)=>{const{ownerState:o}=e;return[r.root,(o.variant==="permanent"||o.variant==="persistent")&&r.docked,r.modal]},ft=e=>{const{classes:r,anchor:o,variant:n}=e,s={root:["root",`anchor${H(o)}`],docked:[(n==="permanent"||n==="persistent")&&"docked"],modal:["modal"],paper:["paper",`paperAnchor${H(o)}`,n!=="temporary"&&`paperAnchorDocked${H(o)}`]};return ye(s,mt,r)},gt=D(Re,{name:"MuiDrawer",slot:"Root",overridesResolver:ve})(Q(({theme:e})=>({zIndex:(e.vars||e).zIndex.drawer}))),yt=D("div",{shouldForwardProp:Le,name:"MuiDrawer",slot:"Docked",skipVariantsResolver:!1,overridesResolver:ve})({flex:"0 0 auto"}),bt=D($e,{name:"MuiDrawer",slot:"Paper",overridesResolver:(e,r)=>{const{ownerState:o}=e;return[r.paper,r[`paperAnchor${H(o.anchor)}`],o.variant!=="temporary"&&r[`paperAnchorDocked${H(o.anchor)}`]]}})(Q(({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 vt(e){return["left","right"].includes(e)}function jt({direction:e},r){return e==="rtl"&&vt(r)?je[r]:r}const kt=h.forwardRef(function(r,o){const n=ge({props:r,name:"MuiDrawer"}),s=K(),l=Te(),a={enter:s.transitions.duration.enteringScreen,exit:s.transitions.duration.leavingScreen},{anchor:d="left",BackdropProps:x,children:p,className:m,elevation:b=16,hideBackdrop:g=!1,ModalProps:{BackdropProps:k,...E}={},onClose:M,open:z=!1,PaperProps:v={},SlideProps:I,TransitionComponent:T,transitionDuration:w=a,variant:S="temporary",slots:B={},slotProps:c={},...P}=n,y=h.useRef(!1);h.useEffect(()=>{y.current=!0},[]);const F=jt({direction:l?"rtl":"ltr"},d),R={...n,anchor:d,elevation:b,open:z,variant:S,...P},$=ft(R),C={slots:{transition:T,...B},slotProps:{paper:v,transition:I,...c,backdrop:Be(c.backdrop||{...x,...k},{transitionDuration:w})}},[U,_]=A("root",{ref:o,elementType:gt,className:W($.root,$.modal,m),shouldForwardComponentProp:!0,ownerState:R,externalForwardedProps:{...C,...P,...E},additionalProps:{open:z,onClose:M,hideBackdrop:g,slots:{backdrop:C.slots.backdrop},slotProps:{backdrop:C.slotProps.backdrop}}}),[N,i]=A("paper",{elementType:bt,shouldForwardComponentProp:!0,className:W($.paper,v.className),ownerState:R,externalForwardedProps:C,additionalProps:{elevation:S==="temporary"?b:0,square:!0,...S==="temporary"&&{role:"dialog","aria-modal":"true"}}}),[f,L]=A("docked",{elementType:yt,ref:o,className:W($.root,$.docked,m),ownerState:R,externalForwardedProps:C,additionalProps:P}),[we,Se]=A("transition",{elementType:xt,ownerState:R,externalForwardedProps:C,additionalProps:{in:z,direction:je[F],timeout:w,appear:y.current}}),ie=t.jsx(N,{...i,children:p});if(S==="permanent")return t.jsx(f,{...L,children:ie});const le=t.jsx(we,{...Se,children:ie});return S==="persistent"?t.jsx(f,{...L,children:le}):t.jsx(U,{..._,children:le})}),wt=j([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")]),St=j(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"})),Pt=j(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"})),Et=j(t.jsx("path",{d:"M9.37 5.51c-.18.64-.27 1.31-.27 1.99 0 4.08 3.32 7.4 7.4 7.4.68 0 1.35-.09 1.99-.27C17.45 17.19 14.93 19 12 19c-3.86 0-7-3.14-7-7 0-2.93 1.81-5.45 4.37-6.49M12 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"})),Mt=j(t.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"})),zt=j(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"})),It=j(t.jsx("path",{d:"m12 5.69 5 4.5V18h-2v-6H9v6H7v-7.81zM12 3 2 12h3v8h6v-6h2v6h6v-8h3z"})),Ct=j(t.jsx("path",{d:"M12 9c1.65 0 3 1.35 3 3s-1.35 3-3 3-3-1.35-3-3 1.35-3 3-3m0-2c-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"})),Dt=j(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"})),Tt=j([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 q(e){return t.jsxs(He,{...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 Bt=/\.malloy(nb)?$/;function Rt(){const{pathname:e,search:r}=G(),o=Z(),n=Ne(),s=Ae(),l=Je(),a=o.environmentName??"",d=o.packageName??"",x=o["*"]??"",p=a!==""&&d!==""&&x!==""&&!Bt.test(x),{reports:m,settled:b}=Oe(a,d,void 0,p);if(!p||s)return null;const g=x.replace(/\/$/,""),k=Ke(r),E=e.replace(/\/$/,"");return k?l?null:t.jsx(pe,{label:"View",onClick:()=>n(`${E}${Ge(r)}`)}):(b?We(`${g}.malloy`,m):void 0)?.editable?t.jsx("span",{onPointerEnter:()=>void he(),onFocus:()=>void he(),children:t.jsx(pe,{label:"Edit",icon:t.jsx(Mt,{}),onClick:()=>n(`${E}${Ze(r)}`)})}):null}function X({label:e,onClick:r,current:o=!1}){return t.jsx(Ve,{clickable:!0,onClick:r,label:e,size:"small","aria-label":`Navigate to ${e}`,"aria-current":o?"page":void 0,sx:n=>({backgroundColor:"transparent",border:"none",color:o?"text.primary":"text.secondary",fontWeight:o?500:400,fontSize:13,height:28,cursor:"pointer",borderRadius:"6px",maxWidth:320,"& .MuiChip-label":{px:.75,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},"&:hover":{backgroundColor:n.palette.mode==="dark"?"rgba(255, 255, 255, 0.08)":"grey.100"}})})}function $t(){const e=Z(),r=e["*"]?e["*"].replace(/\/$/,""):void 0,o=ee();return!e.environmentName&&!e.packageName&&!r?null:t.jsx(u,{sx:{display:"flex",alignItems:"center",minWidth:0},children:t.jsxs(pt,{"aria-label":"breadcrumb",separator:t.jsx(u,{component:"span","aria-hidden":!0,sx:{color:"text.disabled"},children:"/"}),children:[e.environmentName&&t.jsx(X,{label:e.environmentName,current:!e.packageName&&!r,onClick:n=>o(`/${e.environmentName}/`,n)}),e.packageName&&t.jsx(X,{label:e.packageName,current:!r,onClick:n=>o(`/${e.environmentName}/${e.packageName}/`,n)}),r&&t.jsx(X,{label:r,current:!0,onClick:n=>o(`/${e.environmentName}/${e.packageName}/${r}`,n)})]})})}const Lt=260,Ht=64;function ke({isCollapsed:e,onToggleCollapse:r,logoHeader:o}){return t.jsxs(u,{sx:{height:"100dvh",width:e?Ht:Lt,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:o}),t.jsxs(u,{sx:{flex:1,overflowY:"auto",overflowX:"hidden",py:1},children:[t.jsx(At,{isCollapsed:e}),t.jsx(Ot,{isCollapsed:e})]}),t.jsx(Wt,{isCollapsed:e})]})}function Nt({isCollapsed:e,onToggleCollapse:r,logoHeader:o}){const n=ee();return o?t.jsxs(u,{sx:{height:56,display:"flex",alignItems:"center",justifyContent:"space-between",px:e?0:2,flexShrink:0},children:[o,t.jsx(Y,{size:"small",onClick:r,"aria-label":e?"Expand sidebar":"Collapse sidebar",children:t.jsx(q,{fontSize:"small"})})]}):t.jsxs(u,{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(u,{onClick:s=>n("/",s),sx:{display:"flex",alignItems:"center",gap:1,cursor:"pointer",minWidth:0},children:[t.jsx(u,{component:"img",src:"/logo.svg",alt:"Malloy",sx:{width:24,height:24,flexShrink:0}}),!e&&t.jsx(J,{variant:"subtitle1",sx:{color:"text.primary",fontWeight:500,letterSpacing:"-0.025em",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:"Malloy Publisher"})]}),t.jsx(V,{title:e?"Expand sidebar":"Collapse sidebar",placement:"right",children:t.jsx(Y,{size:"small",onClick:r,"aria-label":e?"Expand sidebar":"Collapse sidebar",children:t.jsx(q,{fontSize:"small"})})})]})}function At({isCollapsed:e}){const o=G().pathname==="/";return t.jsx(te,{sx:{py:0},children:t.jsx(se,{icon:t.jsx(It,{fontSize:"small"}),label:"Home",to:"/",selected:o,isCollapsed:e})})}function Ot({isCollapsed:e}){const{apiClients:r}=Fe(),o=Z(),{data:n}=Ue({queryKey:["environments"],queryFn:()=>r.environments.listEnvironments()}),s=n?.data??[];return s.length===0?null:t.jsxs(u,{sx:{mt:1},children:[!e&&t.jsx(J,{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(te,{sx:{py:0},children:s.map(l=>{const a=l.name??"";return t.jsx(se,{icon:t.jsx(zt,{fontSize:"small"}),label:a,to:`/${a}`,selected:o.environmentName===a,isCollapsed:e},a)})})]})}function Wt({isCollapsed:e}){const{pathname:r}=G(),o=[{label:"Malloy Docs",href:ue.docsHome,icon:t.jsx(wt,{fontSize:"small"}),external:!0},{label:"Publisher Docs",href:ue.publishing,icon:t.jsx(Dt,{fontSize:"small"}),external:!0},{label:"Publisher API",href:"/api-doc.html",icon:t.jsx(Pt,{fontSize:"small"}),external:!1}];return t.jsxs(te,{sx:{py:1},children:[t.jsx(se,{icon:t.jsx(Tt,{fontSize:"small"}),label:"Theme",to:"/settings/theme",selected:r.startsWith("/settings/theme"),isCollapsed:e}),t.jsx(_t,{isCollapsed:e}),o.map(n=>t.jsx(Vt,{label:n.label,href:n.href,icon:n.icon,external:n.external,isCollapsed:e},n.label))]})}function se({icon:e,label:r,to:o,selected:n,isCollapsed:s}){const l=ee(),a=t.jsxs(re,{selected:n,onClick:d=>l(o,d),sx:{justifyContent:s?"center":"flex-start",px:s?0:2},children:[t.jsx(ne,{sx:{minWidth:s?0:36,justifyContent:"center",color:n?"text.primary":"text.secondary"},children:e}),!s&&t.jsx(oe,{primary:r,primaryTypographyProps:{variant:"body2",sx:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}}})]});return s?t.jsx(V,{title:r,placement:"right",children:t.jsx(u,{children:a})}):a}function Vt({label:e,href:r,icon:o,external:n,isCollapsed:s}){const l=t.jsxs(re,{component:"a",href:r,target:n?"_blank":void 0,rel:n?"noopener noreferrer":void 0,sx:{justifyContent:s?"center":"flex-start",px:s?0:2},children:[t.jsx(ne,{sx:{minWidth:s?0:36,justifyContent:"center",color:"text.secondary"},children:o}),!s&&t.jsx(oe,{primary:e,primaryTypographyProps:{variant:"body2",sx:{color:"text.secondary",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}}})]});return s?t.jsx(V,{title:e,placement:"right",children:t.jsx(u,{children:l})}):l}const Ft={light:"dark",dark:"auto",auto:"light"},Ut={light:"Light mode",dark:"Dark mode",auto:"Auto mode"},xe={light:"Light mode (click for dark)",dark:"Dark mode (click for auto)",auto:"Auto mode (follows OS, click for light)"};function _t({isCollapsed:e}){const{mode:r,userChoice:o,setMode:n,allowUserToggle:s}=_e();if(!s)return null;const l=o??r,a=l==="auto"?St:l==="dark"?Et:Ct,d=t.jsxs(re,{"aria-label":xe[l],onClick:()=>n(Ft[l]),sx:{justifyContent:e?"center":"flex-start",px:e?0:2},children:[t.jsx(ne,{sx:{minWidth:e?0:36,justifyContent:"center",color:"text.secondary"},children:t.jsx(a,{fontSize:"small"})}),!e&&t.jsx(oe,{primary:Ut[l],primaryTypographyProps:{variant:"body2",sx:{color:"text.secondary",whiteSpace:"nowrap"}}})]});return t.jsx(V,{title:xe[l],placement:"right",disableHoverListener:!e,children:t.jsx(u,{children:d})})}function Xt({open:e,onClose:r,logoHeader:o}){return t.jsx(kt,{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:o})})}function Jt({headerProps:e}){const r=K(),o=Xe(r.breakpoints.up("md")),[n,s]=h.useState(!1),[l,a]=h.useState(!1);return h.useEffect(()=>{o&&n&&s(!1)},[o,n]),t.jsxs(u,{sx:{height:"100dvh",display:"flex",flexDirection:"row",bgcolor:"background.default"},children:[o&&t.jsx(ke,{isCollapsed:l,onToggleCollapse:()=>a(d=>!d),logoHeader:e?.logoHeader}),t.jsxs(u,{component:"main",sx:{flex:1,display:"flex",flexDirection:"column",minWidth:0},children:[t.jsxs(u,{sx:{flexShrink:0,display:"flex",alignItems:"center",justifyContent:"space-between",height:Ye.headerHeight,px:{xs:1,md:3},backgroundColor:"background.default"},children:[t.jsx(u,{sx:{display:{xs:"flex",md:"none"},alignItems:"center",mr:1},children:t.jsx(Y,{size:"small",onClick:()=>s(!0),"aria-label":"Open navigation",children:t.jsx(q,{fontSize:"small"})})}),t.jsx(u,{sx:{flex:1,minWidth:0,display:"flex",alignItems:"center"},children:t.jsx($t,{})}),t.jsxs(u,{id:"header-actions-portal",sx:{display:"flex",alignItems:"center",flexShrink:0,gap:1},children:[t.jsx(Rt,{}),e?.endCap]})]}),t.jsx(u,{sx:{flex:1,overflow:"auto",minWidth:320,minHeight:0},children:t.jsx(h.Suspense,{fallback:t.jsx(Qe,{}),children:t.jsx(qe,{})})})]}),t.jsx(Xt,{open:n,onClose:()=>s(!1),logoHeader:e?.logoHeader})]})}export{Jt as default};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index.es-FZZk_rEa.js","assets/index-5On9Gkpl.js","assets/index-DUqldpo0.css","assets/ToggleButtonGroup-C6Lespxy.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{g as ne,b as re,a1 as E,a2 as se,r as d,u as oe,i as ae,j as t,f as ie,z as W,h as le,s as ce,T as C,m as ue,a3 as de,a4 as M,c as B,F as I,a5 as pe,a6 as fe,a7 as A,a8 as N,a9 as z,U as V,I as x,aa as he,ab as R,ac as q,ad as xe,ae as me,af as ge,ag as ye,ah as ve,E as be,C as $,ai as je,aj as ke,ak as O,al as G,am as Ce,an as we,ao as H,ap as Ee,aq as X,H as Re,ar as De,as as Se,a0 as T,at as P,D as $e,O as Ae,au as Le,av as F,aw as Me}from"./index-5On9Gkpl.js";import{i as L,w as Te,a as J,l as Pe}from"./documentRoutes-xv0fP4cS.js";import{a as Fe,l as K}from"./editPageMounted-COiBq84S.js";function Ue(e){return ne("MuiLink",e)}const _e=re("MuiLink",["root","underlineNone","underlineHover","underlineAlways","button","focusVisible"]),We=({theme:e,ownerState:r})=>{const n=r.color;if("colorSpace"in e&&e.colorSpace){const u=E(e,`palette.${n}.main`)||E(e,`palette.${n}`)||r.color;return e.alpha(u,.4)}const o=E(e,`palette.${n}.main`,!1)||E(e,`palette.${n}`,!1)||r.color,a=E(e,`palette.${n}.mainChannel`)||E(e,`palette.${n}Channel`);return"vars"in e&&a?`rgba(${a} / 0.4)`:se(o,.4)},U={primary:!0,secondary:!0,error:!0,info:!0,success:!0,warning:!0,textPrimary:!0,textSecondary:!0,textDisabled:!0},Be=e=>{const{classes:r,component:n,focusVisible:o,underline:a}=e,u={root:["root",`underline${W(a)}`,n==="button"&&"button",o&&"focusVisible"]};return le(u,Ue,r)},Ie=ce(C,{name:"MuiLink",slot:"Root",overridesResolver:(e,r)=>{const{ownerState:n}=e;return[r.root,r[`underline${W(n.underline)}`],n.component==="button"&&r.button]}})(ue(({theme:e})=>({variants:[{props:{underline:"none"},style:{textDecoration:"none"}},{props:{underline:"hover"},style:{textDecoration:"none","&:hover":{textDecoration:"underline"}}},{props:{underline:"always"},style:{textDecoration:"underline","&:hover":{textDecorationColor:"inherit"}}},{props:({underline:r,ownerState:n})=>r==="always"&&n.color!=="inherit",style:{textDecorationColor:"var(--Link-underlineColor)"}},{props:({underline:r,ownerState:n})=>r==="always"&&n.color==="inherit",style:e.colorSpace?{textDecorationColor:e.alpha("currentColor",.4)}:null},...Object.entries(e.palette).filter(de()).map(([r])=>({props:{underline:"always",color:r},style:{"--Link-underlineColor":e.alpha((e.vars||e).palette[r].main,.4)}})),{props:{underline:"always",color:"textPrimary"},style:{"--Link-underlineColor":e.alpha((e.vars||e).palette.text.primary,.4)}},{props:{underline:"always",color:"textSecondary"},style:{"--Link-underlineColor":e.alpha((e.vars||e).palette.text.secondary,.4)}},{props:{underline:"always",color:"textDisabled"},style:{"--Link-underlineColor":(e.vars||e).palette.text.disabled}},{props:{component:"button"},style:{position:"relative",WebkitTapHighlightColor:"transparent",backgroundColor:"transparent",outline:0,border:0,margin:0,borderRadius:0,padding:0,cursor:"pointer",userSelect:"none",verticalAlign:"middle",MozAppearance:"none",WebkitAppearance:"none","&::-moz-focus-inner":{borderStyle:"none"},[`&.${_e.focusVisible}`]:{outline:"auto"}}}]}))),Ne=d.forwardRef(function(r,n){const o=oe({props:r,name:"MuiLink"}),a=ae(),{className:u,color:s="primary",component:l="a",onBlur:i,onFocus:c,TypographyClasses:m,underline:h="always",variant:p="inherit",sx:f,...y}=o,[v,k]=d.useState(!1),g=j=>{M(j.target)||k(!1),i&&i(j)},w=j=>{M(j.target)&&k(!0),c&&c(j)},b={...o,color:s,component:l,focusVisible:v,underline:h,variant:p},S=Be(b);return t.jsx(Ie,{color:s,className:ie(S.root,u),classes:m,component:l,onBlur:g,onFocus:w,ref:n,ownerState:b,variant:p,...y,sx:[...U[s]===void 0?[{color:s}]:[],...Array.isArray(f)?f:[f]],style:{...y.style,...h==="always"&&s!=="inherit"&&!U[s]&&{"--Link-underlineColor":We({theme:a,ownerState:b})}}})});function ze(e,r){const n=B(),{reports:o,settled:a,isError:u}=I(e,r),s=a&&!u;return d.useCallback((l,i)=>{const c=l.path;if(!pe(c))return"malformed";const m=fe(c,o),h=A(e,r,m.kind==="path"?m.report.path:c),p=new URLSearchParams(l.givens).toString();return n(h+(p?`?${p}`:""),i),m.kind==="path"?"resolved":s?"unresolved":"unverified"},[n,e,r,o,s])}const Ve=1200,D={p:3,maxWidth:Ve,mx:"auto"},Y={...D,pt:6},qe='[data-tile-kind="query"]',Oe=".malloy-render, .malloy-table, [role='alert'], .MuiAlert-root",Ge=3e3;function Q(e,r,n,o){const a=d.useRef(n);a.current=n;const u=d.useRef(!1);d.useEffect(()=>{if(!a.current||u.current)return;let s=0;const l={},i=()=>{clearTimeout(m),l.beat!==void 0&&clearInterval(l.beat),cancelAnimationFrame(s),l.observer?.disconnect()},c=()=>{u.current||(u.current=!0,i(),a.current?.())},m=setTimeout(c,Ge);if(!r)return()=>clearTimeout(m);const h=()=>{const p=e.current;if(!p||o&&p.querySelector(o)===null)return;const f=window.innerHeight;[...p.querySelectorAll(qe)].filter(v=>{if(v.getBoundingClientRect().top>=f)return!1;const g=v.querySelector(Oe);return!g||g.getBoundingClientRect().height<8}).length===0&&s===0&&(s=requestAnimationFrame(()=>{s=requestAnimationFrame(c)}))};return l.observer=new MutationObserver(h),e.current&&l.observer.observe(e.current,{childList:!0,subtree:!0}),l.beat=setInterval(h,50),h(),i},[r,e,o])}function Z({environmentName:e,packageName:r,path:n,editable:o=n.endsWith(".malloy"),onReady:a}){const u=d.useRef(null);Q(u,!0,a,`.${me.report}`);const{params:s,onGivensChange:l}=N(),i=ze(e,r),c=B(),m=d.useMemo(()=>z({environmentName:e,packageName:r}),[e,r]),h=V();return d.useEffect(()=>{if(!o||h)return;const p=()=>void xe(()=>import("./index.es-FZZk_rEa.js"),__vite__mapDeps([0,1,2,3])),f=window.requestIdleCallback;if(f){const v=f(p);return()=>window.cancelIdleCallback?.(v)}const y=setTimeout(p,1500);return()=>clearTimeout(y)},[o,h]),t.jsx(x,{ref:u,sx:Y,children:n.endsWith(".malloynb")?t.jsx(he,{resourceUri:R({environmentName:e,packageName:r,modelPath:n}),givens:s,onGivensChange:l,onNavigate:c,onDrillNavigate:i,maxResultSize:1024*1024}):t.jsx(q,{resourceUri:R({environmentName:e,packageName:r}),path:n,givens:s,onGivensChange:l,onNavigate:i,onLinkNavigate:c,onEvent:m,maxResultSize:1024*1024})})}function He(){const[e,r]=d.useState(!1),n=d.useRef(!1),o=d.useRef(!1),a=d.useCallback(i=>{n.current=i,r(i)},[]),u=d.useCallback(()=>{o.current=!0},[]),s=ge(d.useCallback(({currentLocation:i,nextLocation:c})=>n.current&&!o.current&&(i.pathname!==c.pathname||L(i.search)!==L(c.search)),[]));d.useEffect(()=>{if(!e)return;const i=c=>{c.preventDefault(),c.returnValue=""};return window.addEventListener("beforeunload",i),()=>window.removeEventListener("beforeunload",i)},[e]);const l=t.jsx(ye,{open:s.state==="blocked",canSave:!1,onKeepEditing:()=>s.reset?.(),onDiscard:()=>s.proceed?.()});return{onDirtyChange:a,leaving:u,dialog:l}}const Xe=G.lazy(()=>K().then(e=>({default:e.ReportEditor}))),Je=G.lazy(()=>K().then(e=>({default:e.BuilderBar})));function Ke(){const[e,r]=d.useState(null);return d.useEffect(()=>{r(document.getElementById("header-actions-portal"))},[]),e}function ee({environmentName:e,packageName:r,path:n,layout:o="grid",onReady:a,quietLoading:u=!1,offstage:s=!1}){const l=He();Fe();const[i]=d.useState(ve),c=be(),{pathname:m,search:h}=$(),p=Ke(),[f,y]=d.useState(),v=d.useRef(null),k=V();Q(v,f!==void 0||k,a);const g=()=>c(`${m.replace(/\/$/,"")}${Te(h)}`),w=d.useMemo(()=>z({environmentName:e,packageName:r}),[e,r]),b=t.jsx(q,{resourceUri:R({environmentName:e,packageName:r}),path:n,manifestStaleTime:1e4});return t.jsxs(x,{ref:v,sx:Y,children:[t.jsx(je,{children:t.jsx(d.Suspense,{fallback:u?null:b,children:t.jsx(Xe,{resourceUri:R({environmentName:e,packageName:r}),path:n,layout:o,keepDraft:i,onDirtyChange:l.onDirtyChange,onExit:g,onOpenModel:S=>c(`/${[e,r,...S.split("/")].map(encodeURIComponent).join("/")}`),onEvent:w,loading:u?null:b,onControlsChange:y},`${e}/${r}/${n}`)})}),l.dialog,p&&!s&&ke.createPortal(t.jsx(d.Suspense,{fallback:t.jsx(O,{variant:"contained",disableElevation:!0,onClick:g,children:"Done"}),children:t.jsx(Je,{controls:f,onDone:g})}),p)]})}function Ye({environmentName:e,packageName:r,routePath:n,edit:o,reports:a,children:u}){const{search:s}=$(),l=Ce(n);if(!l)return t.jsx(t.Fragment,{children:u});const i=we(l.name,a,l.prefer);return"found"in i?t.jsx(H,{replace:!0,to:`${A(e,r,i.found.path)}${o?J(s):s}`}):"ambiguous"in i?t.jsxs(x,{sx:D,children:[t.jsxs(C,{variant:"h6",sx:{fontWeight:"fontWeightMedium"},children:["More than one report is named ",l.name]}),t.jsx(C,{variant:"body2",color:"text.secondary",sx:{mt:1},children:"This is an old link, which names a report by its file name alone. Open one by its path:"}),t.jsx(x,{component:"ul",sx:{mt:1},children:i.ambiguous.map(c=>t.jsx("li",{children:t.jsx(Ee,{to:A(e,r,c),style:{fontFamily:X},children:c})},c))})]}):t.jsx(t.Fragment,{children:u})}function Qe({environmentName:e,packageName:r,routePath:n,edit:o,notFound:a,notFoundUntilListed:u=!1}){const{reports:s,settled:l,isFetching:i,isError:c,refetch:m}=I(e,r),{search:h}=$(),p=`${n}.malloy`,f=l?Re(p,s):void 0,y=l&&!i&&!c,[v,k]=d.useState();d.useEffect(()=>{y&&k(p)},[y,p]);const g=f!==void 0||y||v===p,w=De(e,r,p,o&&g&&!f),b=te=>t.jsx(Ye,{environmentName:e,packageName:r,routePath:n,edit:o,reports:s,children:te});if(!g&&(u&&!o&&!f))return b(a);if(!g&&c&&!i)return t.jsx(x,{sx:D,children:t.jsxs(Se,{severity:"warning",action:t.jsx(O,{color:"inherit",size:"small",onClick:()=>void m(),children:"Retry"}),children:["Could not list this package's reports, so this page cannot tell what is at ",n,"."]})});if(!g)return t.jsx(T,{text:P.opening()});if(f)return t.jsx(Ze,{environmentName:e,packageName:r,path:f.path,editable:f.editable,layout:f.layout,edit:o});const j=o?void 0:Pe(n);return j!==void 0?t.jsx(H,{replace:!0,to:`/${e}/${r}/${j.split("/").map(encodeURIComponent).join("/")}${J(h)}`}):b(o?w.settled?t.jsx(ee,{environmentName:e,packageName:r,path:p,layout:w.layout??"grid"}):t.jsx(T,{text:P.opening()}):a)}function Ze({environmentName:e,packageName:r,path:n,editable:o,layout:a,edit:u}){const[s,l]=d.useState(u?"editor":"reader"),i=u?"editor":"reader",c=i==="reader"||s==="reader",m=i==="editor"||s==="editor",h={position:"absolute",inset:0,visibility:"hidden",pointerEvents:"none",overflow:"hidden"};return t.jsxs(x,{sx:{position:"relative"},"data-switching":c&&m||void 0,children:[c&&t.jsx(x,{sx:s==="reader"?void 0:h,"aria-hidden":s!=="reader"||void 0,children:t.jsx(Z,{environmentName:e,packageName:r,path:n,...o!==void 0?{editable:o}:{},onReady:()=>{u||l("reader")}})},"reader"),m&&t.jsx(x,{sx:s==="editor"?void 0:h,"aria-hidden":s!=="editor"||void 0,children:t.jsx(ee,{environmentName:e,packageName:r,path:n,...a?{layout:a}:{},quietLoading:c,offstage:i!=="editor"||s!=="editor",onReady:()=>{u&&l("editor")}})},"editor")]})}function rt(){const e=$e(),{search:r}=$(),n=e["*"],{server:o}=Ae(),{params:a,onGivensChange:u}=N();if(!e.environmentName)return t.jsx("div",{children:t.jsx("h2",{children:"Missing environment name"})});if(!e.packageName)return t.jsx("div",{children:t.jsx("h2",{children:"Missing package name"})});if(n!==void 0&&n!==""&&!n.endsWith(".malloy")&&!n.endsWith(".malloynb")){const l=n.replace(/\/$/,""),i=l.startsWith("data-apps/"),c=i?t.jsx(Le,{resourceUri:R({environmentName:e.environmentName,packageName:e.packageName,modelPath:l.slice(10)})}):t.jsx(_,{environmentName:e.environmentName,packageName:e.packageName,modelPath:n,staticUrl:F({server:o,environmentName:e.environmentName,packageName:e.packageName,path:n})});return t.jsx(Qe,{environmentName:e.environmentName,packageName:e.packageName,routePath:l,edit:L(r),notFound:c,notFoundUntilListed:i})}const s=R({environmentName:e.environmentName,packageName:e.packageName,modelPath:n});return n?.endsWith(".malloy")?t.jsx(x,{sx:D,children:t.jsx(Me,{resourceUri:s,runOnDemand:!0,maxResultSize:512*1024,givens:a,onGivensChange:u})}):n?.endsWith(".malloynb")?t.jsx(Z,{environmentName:e.environmentName,packageName:e.packageName,path:n,editable:!1}):t.jsx(_,{environmentName:e.environmentName,packageName:e.packageName,modelPath:n??"",staticUrl:F({server:o,environmentName:e.environmentName,packageName:e.packageName,path:n??""})})}function _({packageName:e,modelPath:r,staticUrl:n}){const o=/\.[^./]+$/.test(r),a={fontFamily:X};return t.jsxs(x,{sx:D,children:[t.jsx(C,{variant:"h6",sx:{fontWeight:"fontWeightMedium"},children:"Nothing to open at this path"}),t.jsxs(C,{variant:"body2",color:"text.secondary",sx:{mt:1},children:[t.jsx(x,{component:"span",sx:a,children:r})," ","does not name a report, a"," ",t.jsx(x,{component:"span",sx:a,children:".malloy"})," ","or a"," ",t.jsx(x,{component:"span",sx:a,children:".malloynb"})," ","file in package"," ",t.jsx(x,{component:"span",sx:a,children:e}),". This address opens reports by their path without"," ",t.jsx(x,{component:"span",sx:a,children:".malloy"}),", and"," ",t.jsx(x,{component:"span",sx:a,children:".malloy"})," ","and"," ",t.jsx(x,{component:"span",sx:a,children:".malloynb"})," ","files."]}),o&&t.jsxs(C,{variant:"body2",color:"text.secondary",sx:{mt:1},children:["A file from the package's"," ",t.jsx(x,{component:"span",sx:a,children:"public/"})," ","directory is served at ",t.jsx(Ne,{href:n,children:n}),"."]}),t.jsx(C,{variant:"body2",color:"text.secondary",sx:{mt:1},children:"The package lists its reports, models, and data apps."})]})}export{rt as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{D as m,c as g,r as u,a9 as l,j as n,ab as p,ax as x}from"./index-5On9Gkpl.js";import{d}from"./documentRoutes-xv0fP4cS.js";function j(){const{environmentName:e,packageName:a}=m(),s=g(),r=u.useMemo(()=>l({environmentName:e??"",packageName:a??""}),[e,a]);if(e)if(a){const t=p({environmentName:e,packageName:a});return n.jsx(x,{onClickPackageFile:s,onOpenDocument:({path:o,mode:i},c)=>s(d(e,a,o,i),c),resourceUri:t,onEvent:r})}else return n.jsx("div",{children:n.jsx("h2",{children:"Missing package name"})});else return n.jsx("div",{children:n.jsx("h2",{children:"Missing environment name"})})}export{j as default};
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import{ae as ce,j as $,I as ae,r as p,aU as he,V as ue,aV as me,aH as be,aW as W,aX as ye,aY as pe,aZ as fe,a_ as ge,a$ as ve,b0 as we,b1 as oe}from"./index-5On9Gkpl.js";const v=ce.drillCell;function ke(e,t){const r=new Set;let l;try{l=e.getMetadata()?.getAllFields()??[]}catch{return r}const o=new Set;for(const a of l)!a||t(a)||a.tag?.tag("hidden")===void 0&&o.add(a.tag?.text("label")??a.name);for(const a of l){if(!a||!t(a))continue;const n=a.tag?.text("label")??a.name;o.has(n)||r.add(n)}return r}function D(e){const t=/^\s*(\d+)/.exec(e.style?.gridColumn??"");return t?t[1]:void 0}function xe(e,t){if(t.size!==0)for(const r of e.querySelectorAll(".malloy-table")){const l=n=>n.closest(".malloy-table")===r,o=new Set;for(const n of r.querySelectorAll(".column-cell.th")){if(!l(n))continue;const i=(n.textContent??"").replace(/\u200b/g,"").trim(),b=D(n);b&&t.has(i)&&o.add(b)}if(o.size===0)continue;const a=new Set;for(const n of r.querySelectorAll(`.${v}[tabindex="0"]`)){if(!l(n))continue;const i=D(n);i&&(a.has(i)?n.tabIndex=-1:a.add(i))}for(const n of r.querySelectorAll(".column-cell.td")){if(!l(n))continue;const i=D(n),b=!n.querySelector(".value-null")&&(n.textContent??"").trim()!=="";if(i&&b&&o.has(i)&&!n.querySelector(".malloy-table")){if(n.classList.add(v),n.tabIndex===0)a.add(i);else{const f=a.has(i);f||a.add(i),n.tabIndex=f?-1:0}n.setAttribute("role","button")}}}}function Ce(e){const t=e.closest(".malloy-table"),r=D(e);return!t||!r?[]:Array.from(t.querySelectorAll(`.${v}`)).filter(l=>l.closest(".malloy-table")===t&&D(l)===r)}function ne(e,t){const r=Ce(e),l=r.indexOf(e);if(l===-1)return;const o=t==="first"?r[0]:t==="last"?r[r.length-1]:r[Math.min(Math.max(l+t,0),r.length-1)];if(o){for(const a of r)a.tabIndex=a===o?0:-1;return o}}function Ae(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 Se(e){const{foreground:t,axisFaint:r,gridline:l,font:o}=e,a={background:e.background,font:o.family,title:{color:t,font:o.family},axis:{labelColor:t,titleColor:t,domainColor:r,tickColor:r,gridColor:l,labelFont:o.family,titleFont:o.family},legend:{labelColor:t,titleColor:t,labelFont:o.family,titleFont:o.family},header:{labelColor:t,titleColor:t},range:{category:e.series}},n={...a,legend:{...a.legend,orient:"bottom"}};return i=>i==="shape_map"?n:a}function Ee(e){if(!e)return;const t=e.tag("theme");if(!t)return;const r={},l=t.tag("palette");if(l){const a={},n=l.textArray("series");n&&n.length>0&&(a.series=n);for(const i of he){const b=l.tag(i);if(!b)continue;const f={},x=b.text("light"),w=b.text("dark");x&&(f.light=x),w&&(f.dark=w),Object.keys(f).length>0&&(a[i]=f)}Object.keys(a).length>0&&(r.palette=a)}const o=t.tag("font");if(o){const a={},n=o.text("family");n&&(a.family=n);const i=o.numeric("size");typeof i=="number"&&Number.isFinite(i)&&(a.size=i),Object.keys(a).length>0&&(r.font=a)}return Object.keys(r).length>0?r:void 0}const B="data-publisher-fill",ze=async(e,t)=>{if(typeof window>"u")throw new Error("MalloyRenderer can only be used in browser environment");const{MalloyRenderer:r}=await pe();return new r({onClick:t,vegaConfigOverride:Se(e),theme:Ae(e),onError:l=>{console.error("Error rendering visualization:",typeof l,l)}}).createViz()};async function Me(e){if(!e||typeof e!="object")return;const t=e,r=[...Array.isArray(t.model_annotations)?t.model_annotations:[],...Array.isArray(t.source_annotations)?t.source_annotations:[],...Array.isArray(t.annotations)?t.annotations:[]].map(o=>typeof o?.value=="string"?o.value:void 0).filter(o=>!!o);if(r.length===0)return;let l;try{({parseAnnotation:l}=await ye())}catch{return}try{const{tag:o}=l(r);return Ee(o)}catch(o){console.warn("Failed to parse # theme.* annotations; chart will render with the shell theme.",{error:o,lines:r});return}}function je(e,t,r){const l=fe(t,r);for(const[o,a]of Object.entries(l))e.style.setProperty(o,a)}const Fe=`
|
|
2
|
+
/* Card geometry, through the renderer's OWN theme vars rather than over the top
|
|
3
|
+
of them. It declares --malloy-theme--dashboard-* on .malloy-render itself and
|
|
4
|
+
passes each through to the --malloy-render--* the card CSS reads, so a value
|
|
5
|
+
inherited from our wrapper loses to that declaration however early it is set:
|
|
6
|
+
this has to be a rule on the same element, at higher specificity. Doubling the
|
|
7
|
+
class does that, and then no !important is needed — which matters, because
|
|
8
|
+
!important here also lands on .dashboard-item-borderless and repaints a card
|
|
9
|
+
the author asked to have no card. */
|
|
10
|
+
.malloy-render.malloy-render {
|
|
11
|
+
--malloy-theme--dashboard-card-radius: var(--publisher-dashboard-card-radius);
|
|
12
|
+
--malloy-theme--dashboard-card-padding: var(--publisher-dashboard-card-padding);
|
|
13
|
+
}
|
|
14
|
+
/* dashboard.css hardcodes background: #f7f9fc on .malloy-dashboard
|
|
15
|
+
and .dashboard-row-header, which would paint light grey in dark
|
|
16
|
+
mode and also bleed an operator-picked palette.background across
|
|
17
|
+
the panel chrome in light. Both surfaces use
|
|
18
|
+
--malloy-render--background here, which buildMalloyExplicitTheme
|
|
19
|
+
wires to dashboardRoot: a mode-keyed neutral that stays decoupled
|
|
20
|
+
from palette.background (the chart canvas) on purpose. Selectors
|
|
21
|
+
are duplicated at higher specificity to beat the renderer s own
|
|
22
|
+
scoped rules. */
|
|
23
|
+
.malloy-render .malloy-dashboard,
|
|
24
|
+
.malloy-render.malloy-render .malloy-dashboard,
|
|
25
|
+
div.malloy-render .malloy-dashboard {
|
|
26
|
+
/* --publisher-dashboard-root is set on the outer Publisher wrapper
|
|
27
|
+
(see buildTableCssVars) and stays decoupled from
|
|
28
|
+
--malloy-render--background, which gets shadowed inside the
|
|
29
|
+
renderer when a theme.background annotation is present. The
|
|
30
|
+
dedicated var means the panel between tiles always paints the
|
|
31
|
+
operator neutral dashboardRoot regardless of annotations. */
|
|
32
|
+
background: var(--publisher-dashboard-root) !important;
|
|
33
|
+
background-color: var(--publisher-dashboard-root) !important;
|
|
34
|
+
color: var(--malloy-render--table-body-color) !important;
|
|
35
|
+
}
|
|
36
|
+
.malloy-render .malloy-dashboard .dashboard-row,
|
|
37
|
+
.malloy-render .malloy-dashboard .dashboard-row-body,
|
|
38
|
+
.malloy-render .malloy-dashboard .dashboard-row-header,
|
|
39
|
+
.malloy-render.malloy-render .malloy-dashboard .dashboard-row-header,
|
|
40
|
+
div.malloy-render .malloy-dashboard .dashboard-row-header {
|
|
41
|
+
/* Belt + suspenders: dashboard.css hardcodes .dashboard-row-header
|
|
42
|
+
to #f7f9fc, and row / row-body have no explicit background but
|
|
43
|
+
get caught in any annotation-driven inline writes. Force all of
|
|
44
|
+
them to the neutral panel colour. */
|
|
45
|
+
background: var(--publisher-dashboard-root) !important;
|
|
46
|
+
background-color: var(--publisher-dashboard-root) !important;
|
|
47
|
+
}
|
|
48
|
+
.malloy-render .malloy-dashboard .dashboard-item:not(.dashboard-item-borderless) {
|
|
49
|
+
/* Tile padding around each chart / table. Uses our custom
|
|
50
|
+
--malloy-render--tile-background so the operator can theme the
|
|
51
|
+
tile separately from the table header row (which paints from
|
|
52
|
+
--malloy-render--table-pinned-background below).
|
|
53
|
+
|
|
54
|
+
A flat bordered card rather than the renderer's shadow ring, which is what
|
|
55
|
+
makes it match the composite tile's Paper. :not(borderless) because
|
|
56
|
+
# borderless asks for no card at all, and an !important background and
|
|
57
|
+
border drew one anyway. */
|
|
58
|
+
background: var(--malloy-render--tile-background) !important;
|
|
59
|
+
color: var(--malloy-render--table-body-color) !important;
|
|
60
|
+
box-shadow: none !important;
|
|
61
|
+
/* The card edge, not the table gridline: --publisher-dashboard-card-border,
|
|
62
|
+
the same value TileCard paints, so the renderer's card and the composite
|
|
63
|
+
one are outlined identically. */
|
|
64
|
+
border: var(--publisher-dashboard-card-border) !important;
|
|
65
|
+
}
|
|
66
|
+
/* The renderer's big-value card — the small card a "# big_value" measure sits
|
|
67
|
+
in, several to a row inside one tile. (No backticks in here: this is inside
|
|
68
|
+
a template literal.) Its own CSS gives it a 0.55px edge in
|
|
69
|
+
#e5e7eb: a sub-pixel width, and a grey off the slate ramp everything else on
|
|
70
|
+
the page is on. It is a dashboard card like any other, so it takes the card
|
|
71
|
+
edge and stops being the one card outlined in a hairline nobody can see. */
|
|
72
|
+
.malloy-render .malloy-big-value-card {
|
|
73
|
+
border: var(--publisher-dashboard-card-border) !important;
|
|
74
|
+
/* Its shadow is a four-layer Tailwind stack, and only two of those layers
|
|
75
|
+
are a shadow: the other is "0 0 0 1px #e5e7eb", a spread ring drawn as a
|
|
76
|
+
second border OVER the real one. So the border above was landing
|
|
77
|
+
underneath a ring in the renderer's own grey, and the card kept both a
|
|
78
|
+
lifted look the flat cards around it do not have and an edge we did not
|
|
79
|
+
pick. Dropped whole rather than rebuilt layer by layer: the ring's job is
|
|
80
|
+
the border's job, and the border is already doing it. */
|
|
81
|
+
box-shadow: none !important;
|
|
82
|
+
}
|
|
83
|
+
/* The strip of big-value cards as a grid, so cards share a width and the last one does not wrap
|
|
84
|
+
alone. The renderer's wrapping flex row sizes each card to its own text. The 250px floor is the
|
|
85
|
+
widest realistic value: it is nowrap at 32px in an overflow:visible card, so a narrower track
|
|
86
|
+
would spill it onto its neighbour. Embedded (a nested big_value) is left as the renderer draws it. */
|
|
87
|
+
.malloy-render .malloy-big-value:not(.malloy-big-value--embedded) {
|
|
88
|
+
display: grid;
|
|
89
|
+
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
|
|
90
|
+
}
|
|
91
|
+
.malloy-render .malloy-big-value-card:not(.malloy-big-value-card--embedded) {
|
|
92
|
+
width: auto;
|
|
93
|
+
max-width: none;
|
|
94
|
+
}
|
|
95
|
+
.malloy-render .malloy-dashboard .dashboard-row-header-separator {
|
|
96
|
+
background: var(--malloy-render--table-border) !important;
|
|
97
|
+
}
|
|
98
|
+
/* !important because the malloy-explorer stylesheet pins these same properties with it. */
|
|
99
|
+
[${B}] .malloy-table.root {
|
|
100
|
+
height: 100% !important;
|
|
101
|
+
align-content: start !important;
|
|
102
|
+
grid-template-columns: repeat(var(--total-header-size), minmax(max-content, 1fr)) !important;
|
|
103
|
+
}
|
|
104
|
+
.malloy-render .malloy-table .th.column-cell {
|
|
105
|
+
/* Non-pinned tables have no header background in the renderer's
|
|
106
|
+
own CSS (only pinned scrolled tables paint the pinned-header
|
|
107
|
+
with this var). Force the same value here so every table has a
|
|
108
|
+
visible header band reflecting the operator's choice. */
|
|
109
|
+
background: var(--malloy-render--table-pinned-background) !important;
|
|
110
|
+
}
|
|
111
|
+
.malloy-render .dashboard-item-title,
|
|
112
|
+
.malloy-render .dashboard-dimension-name {
|
|
113
|
+
color: var(--malloy-render--label-color) !important;
|
|
114
|
+
}
|
|
115
|
+
.malloy-render .dashboard-item-value,
|
|
116
|
+
.malloy-render .dashboard-item-value-measure,
|
|
117
|
+
.malloy-render .dashboard-dimension-value {
|
|
118
|
+
color: var(--malloy-render--value-color) !important;
|
|
119
|
+
}
|
|
120
|
+
.malloy-render .malloy-table,
|
|
121
|
+
.malloy-render .malloy-list {
|
|
122
|
+
color: var(--malloy-render--table-body-color) !important;
|
|
123
|
+
}
|
|
124
|
+
.malloy-render .column-cell.th,
|
|
125
|
+
.malloy-render .cell-content.header {
|
|
126
|
+
color: var(--malloy-render--table-header-color) !important;
|
|
127
|
+
}
|
|
128
|
+
/* A cell whose column declares a "# drill" this surface can honor, marked
|
|
129
|
+
by markDrillableCells. Ordinary text with a pointer cursor until hovered,
|
|
130
|
+
then it reads as a link: the same affordance Malloyyo gives the same tag,
|
|
131
|
+
and the only thing that tells a reader a cell navigates. Kept off the
|
|
132
|
+
resting state deliberately: a column painted blue competes with the data.
|
|
133
|
+
(No backticks in here: this is inside a template literal.) */
|
|
134
|
+
.malloy-render .${v} {
|
|
135
|
+
cursor: pointer;
|
|
136
|
+
}
|
|
137
|
+
.malloy-render .${v}:hover > .cell-content {
|
|
138
|
+
color: var(--publisher-drill-link) !important;
|
|
139
|
+
text-decoration: underline;
|
|
140
|
+
}
|
|
141
|
+
/* Keyboard focus reads the same as hover, plus a ring: a hover colour is not
|
|
142
|
+
something a keyboard user can produce, and a focus ring is not something a
|
|
143
|
+
mouse user sees. focus-visible rather than focus, so a click does not leave a
|
|
144
|
+
ring behind it. (No backticks in here: this is inside a template literal.) */
|
|
145
|
+
.malloy-render .${v}:focus-visible {
|
|
146
|
+
outline: 2px solid var(--publisher-drill-link);
|
|
147
|
+
outline-offset: -2px;
|
|
148
|
+
}
|
|
149
|
+
.malloy-render .${v}:focus-visible > .cell-content {
|
|
150
|
+
color: var(--publisher-drill-link) !important;
|
|
151
|
+
text-decoration: underline;
|
|
152
|
+
}
|
|
153
|
+
`,le="publisher-malloy-renderer-overrides";function Re(){if(typeof document>"u"||document.getElementById(le))return;const e=document.createElement("style");e.id=le,e.textContent=Fe,document.head.appendChild(e)}function Te({result:e,height:t,drill:r,onSizeChange:l,onSizing:o,fill:a}){const n=p.useRef(null),i=p.useRef(r);i.current=r;const b=p.useCallback(c=>{i.current?.onClick(c)},[]),f=r!==void 0,x=p.useRef(!1),w=p.useRef(null),q=p.useRef(0),{theme:I,layers:Y,mode:J}=ue(),X=p.useMemo(()=>({radius:I.ui.radius.tile,padding:`${me}px`}),[I.ui.radius.tile]);return p.useEffect(()=>()=>{q.current+=1;const c=w.current;c?.viz.remove(),c?.node.remove(),w.current=null},[]),p.useLayoutEffect(()=>{if(!n.current||!e)return;Re();const c=n.current,se=q.current+=1;let V=!1;const H=()=>!V&&se===q.current;let d,m,_=null,K=0,L=null,N=null,P=null,j=null,F=null,R=null,Z=null,G=0,A=null;x.current=!1;let g,S;const U=k=>{if(V||!k.firstElementChild||W(g,S)==="container")return;const T=ge(g,S);if(x.current&&!T)return;const O=c.hasAttribute(B);O&&c.removeAttribute(B);const E=ve(k,oe(g));O&&c.setAttribute(B,""),E>0&&(x.current=!0,l&&E!==G&&(G=E,l(E)));const h=we(k,oe(g));T&&h&&Z!==h&&(Z=h,R?.disconnect(),R=new ResizeObserver(()=>U(k)),R.observe(h))};return(async()=>{let k;try{k=JSON.parse(e)}catch(y){console.error("Error parsing visualization result:",y);return}const T=await Me(k),O=T?be([...Y,T],J):I;if(!H())return;try{m=await ze(O,b)}catch(y){console.error("Failed to create renderer:",y);return}if(!H()){m.remove(),m=void 0;return}const E=w.current;d=document.createElement("div"),d.style.width="100%",d.style.height="100%",je(d,O,X),c.childElementCount>0&&(c.style.position="relative",d.style.position="absolute",d.style.inset="0",d.style.visibility="hidden"),c.appendChild(d);const h=d;j=new MutationObserver(()=>{F&&clearTimeout(F),F=setTimeout(()=>{U(h),x.current&&j?.disconnect()},100)}),j.observe(d,{childList:!0,subtree:!0,attributes:!0});const ie=m;let Q=!1;const ee=()=>{if(!(Q||!H())){Q=!0,A&&(clearTimeout(A),A=null),E?.viz.remove();for(const y of Array.from(c.children))y!==h&&c.removeChild(y);h.style.position="",h.style.inset="",h.style.visibility="",c.style.position="",w.current={viz:ie,node:h},U(h)}};try{m.setResult(k);try{const C=m.getMetadata(),z=C?.getRootField();g=z?.renderAs(),S=z?C?.getPluginsForField(z.key)?.[0]?.sizingStrategy:void 0}catch{g=void 0,S=void 0}o?.(W(g,S)),d.dataset.malloyRenderAs=g??"unknown",d.dataset.malloySizing=W(g,S),m.render(d);const y=i.current;try{if(y){const C=ke(m,y.canDrill),z=()=>{try{xe(h,C)}catch(s){console.warn("Drill affordance skipped:",s)}};z();const te=s=>{const u=s.querySelector(".cell-content")??s,M=u.getBoundingClientRect();u.dispatchEvent(new MouseEvent("click",{bubbles:!0,cancelable:!0,view:u.ownerDocument.defaultView,clientX:Math.round(M.left+M.width/2),clientY:Math.round(M.bottom)}))},re=s=>s.target?.closest?.(`.${v}`)??null,de=(s,u)=>{ne(s,u)?.focus()};L=s=>{const u=re(s);if(!u)return;const M=s.key==="ArrowDown"?1:s.key==="ArrowUp"?-1:s.key==="Home"?"first":s.key==="End"?"last":void 0;if(M!==void 0){s.preventDefault(),de(u,M);return}s.key==="Enter"?(s.preventDefault(),te(u)):s.key===" "&&s.preventDefault()},N=s=>{if(s.key!==" ")return;const u=re(s);u&&(s.preventDefault(),te(u))},P=s=>{const u=s.target?.closest?.(`.${v}`);u&&ne(u,0)},h.addEventListener("keydown",L),h.addEventListener("keyup",N),h.addEventListener("focusin",P),C.size>0&&typeof MutationObserver<"u"&&(_=new MutationObserver(()=>{cancelAnimationFrame(K),K=requestAnimationFrame(z)}),_.observe(h,{childList:!0,subtree:!0}))}}catch(C){console.warn("Drill affordance skipped:",C)}m.onReady(ee),A=setTimeout(ee,1e4)}catch(y){console.error("Error rendering visualization:",y),j?.disconnect(),R?.disconnect(),_?.disconnect(),m.remove(),m=void 0,h.parentNode===c&&c.removeChild(h)}})(),()=>{V=!0,j?.disconnect(),R?.disconnect(),F&&clearTimeout(F),A&&clearTimeout(A),d&&w.current?.node!==d&&(L&&d.removeEventListener("keydown",L),N&&d.removeEventListener("keyup",N),P&&d.removeEventListener("focusin",P),_?.disconnect(),cancelAnimationFrame(K),m?.remove(),d.parentNode===c&&c.removeChild(d),c.style.position="")}},[e,b,f,l,o,I,Y,J,X]),$.jsx("div",{ref:n,...a?{[B]:""}:{},style:{width:"100%",height:t?`${t}px`:"400px"}})}function Oe(e){return typeof window>"u"?$.jsx(ae,{sx:{width:"100%",height:e.height?`${e.height}px`:"100%",display:"flex",alignItems:"center",justifyContent:"center",color:"text.secondary"},children:"Loading..."}):$.jsx(p.Suspense,{fallback:$.jsx(ae,{sx:{width:"100%",height:e.height?`${e.height}px`:"100%",display:"flex",alignItems:"center",justifyContent:"center",color:"text.secondary"},children:"Loading visualization..."}),children:$.jsx(Te,{...e})})}const Be=Object.freeze(Object.defineProperty({__proto__:null,default:Oe},Symbol.toStringTag,{value:"Module"}));export{v as D,Oe as R,Se as a,Ae as b,Be as c,ke as d,xe as m,Ee as r};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{aB as o,j as r,aC as s,aD as n,I as t,T as a}from"./index-5On9Gkpl.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};
|