From 7a7477ebf2c766be49d2c09e4f8a8bf2cc4491f3 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Mon, 11 Nov 2024 13:37:08 -0500 Subject: [PATCH] Add doc pages with supported transforms and functions (#536) --- .prettierignore | 1 + docs/source/_static/custom.css | 54 ++ docs/source/conf.py | 1 + docs/source/index.md | 9 + docs/source/supported_expressions.md | 873 +++++++++++++++++++++++++++ docs/source/supported_transforms.md | 292 +++++++++ pixi.lock | 23 + pixi.toml | 2 +- 8 files changed, 1254 insertions(+), 1 deletion(-) create mode 100644 .prettierignore create mode 100644 docs/source/supported_expressions.md create mode 100644 docs/source/supported_transforms.md diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 00000000..2e1fa2d5 --- /dev/null +++ b/.prettierignore @@ -0,0 +1 @@ +*.md \ No newline at end of file diff --git a/docs/source/_static/custom.css b/docs/source/_static/custom.css index 16336b7d..7a73e3ef 100644 --- a/docs/source/_static/custom.css +++ b/docs/source/_static/custom.css @@ -4,3 +4,57 @@ height: auto; margin-left: 0; } + +/* Color the header of the table */ +table.docutils th { + background-color: #8523a7; + color: white; +} + +/* Make dropdown rounded pill and fit in cell */ +table.docutils td { + padding: 0 +} + +details.sd-dropdown { + margin-top: 0.4em; + margin-bottom: 0.4em !important; + border: 0; +} + +details.sd-dropdown>.sd-card-header { + border: 0 !important; + background-color: var(--color-table-border) !important; + border-radius: 1em !important; + padding: 0 .4em 0 .8em !important; + margin: 0 0.8em 0 0.6em !important; +} + +details.sd-card { + background-color: transparent; + box-shadow: none; +} + +summary.sd-summary-title { + font-weight: normal !important; +} + + +/* Center the contents of the second column */ +table.docutils td:nth-child(2) { + text-align: center; +} + +table.docutils td:first-child { + padding-left: 0.5rem; + padding-right: 0.5rem; +} + +/* Round corners of the first and last column headers */ +table.docutils th:first-child { + border-radius: 0.5rem 0 0 0; +} + +table.docutils th:last-child { + border-radius: 0 0.5rem 0 0; +} diff --git a/docs/source/conf.py b/docs/source/conf.py index 050ccfca..00432cce 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -7,6 +7,7 @@ 'sphinx_copybutton', 'sphinx.ext.autodoc', 'sphinx.ext.napoleon', + 'sphinx_design', ] # Theme settings diff --git a/docs/source/index.md b/docs/source/index.md index 70446b60..3ab3894e 100644 --- a/docs/source/index.md +++ b/docs/source/index.md @@ -38,6 +38,15 @@ grpc vega-lite ``` +```{toctree} +:maxdepth: 2 +:hidden: true +:caption: Vega Coverage + +supported_transforms +supported_expressions +``` + ```{toctree} :maxdepth: 2 :hidden: true diff --git a/docs/source/supported_expressions.md b/docs/source/supported_expressions.md new file mode 100644 index 00000000..a74148e6 --- /dev/null +++ b/docs/source/supported_expressions.md @@ -0,0 +1,873 @@ +# Supported Expressions + +VegaFusion supports a subset of [Vega's expression language](https://vega.github.io/vega/docs/expressions/). Below is a detailed breakdown of supported expression features. + +:::{note} +When a Vega spec includes unsupported expressions, these expressions will be included in the client Vega spec for evaluation by the standard Vega library in the browser. See [How it works](./how_it_works.md) for more details. +::: + +> **Key**: +> - ✅: Full support for the feature and all its options +> - 🟡: Partial support with limitations +> - ❌: Feature is not currently supported + +## Core Language Features + +:::{list-table} +:header-rows: 1 +:widths: 30 10 100 + +* - Feature + - Status + - Details +* - `a + b` + - ✅ + -

+* - `a - b` + - ✅ + -

+* - `a * b` + - ✅ + -

+* - `a / b` + - ✅ + -

+* - `a % b` + - ✅ + -

+* - `-a` + - ✅ + -

+* - `+a` + - ✅ + -

+* - `a == b` + - ✅ + -

+* - `a != b` + - ✅ + -

+* - `a < b` + - ✅ + -

+* - `a > b` + - ✅ + -

+* - `a <= b` + - ✅ + -

+* - `a >= b` + - ✅ + -

+* - `a && b` + - ✅ + -

+* - `a || b` + - ✅ + -

+* - `!a` + - ✅ + -

+* - `a ? b : c` + - ✅ + -

+* - `{a: 1, b: 2}` + - ✅ + -

+* - `[1, 2, 3]` + - ✅ + -

+* - `a.b` + - ✅ + -

+* - `a["b"]` + - ✅ + -

+::: + +## Bound Variables +:::{list-table} +:header-rows: 1 +:widths: 30 10 100 + +* - Variable + - Status + - Details +* - `datum` + - ✅ + -

+* - `event` + - ❌ + -

+* - `item` + - ❌ + -

+* - `parent` + - ❌ + -

+* - Signal Names + - ✅ + -

+::: + +## Constants + +:::{list-table} +:header-rows: 1 +:widths: 20 10 100 + +* - Constant + - Status + - Details +* - `NaN` + - ✅ + -

+* - `E` + - ✅ + -

+* - `LN2` + - ✅ + -

+* - `LN10` + - ✅ + -

+* - `LOG2E` + - ✅ + -

+* - `LOG10E` + - ✅ + -

+* - `MAX_VALUE` + - ✅ + -

+* - `MIN_VALUE` + - ✅ + -

+* - `PI` + - ✅ + -

+* - `SQRT1_2` + - ✅ + -

+* - `SQRT2` + - ✅ + -

+::: + +## Type Checking + +:::{list-table} +:header-rows: 1 +:widths: 40 10 100 + +* - Function + - Status + - Details +* - `isArray(value)` + - ❌ + -

+* - `isBoolean(value)` + - ❌ + -

+* - `isDate(value)` + - ✅ + -

+* - `isDefined(value)` + - ❌ + -

+* - `isNumber(value)` + - ❌ + -

+* - `isObject(value)` + - ❌ + -

+* - `isRegExp(value)` + - ❌ + -

+* - `isString(value)` + - ❌ + -

+* - `isValid(value)` + - ✅ + -

+::: + +## Type Coercion + +:::{list-table} +:header-rows: 1 +:widths: 40 10 100 + +* - Function + - Status + - Details +* - `toBoolean(value)` + - ✅ + -

+* - `toDate(value)` + - ✅ + -

+* - `toNumber(value)` + - ✅ + -

+* - `toString(value)` + - ✅ + -

+::: + +## Control Flow +:::{list-table} +:header-rows: 1 +:widths: 80 10 100 + +* - Function + - Status + - Details +* - `if(test, thenValue, elseValue)` + - ✅ + -

+::: + + +## Math Functions + +:::{list-table} +:header-rows: 1 +:widths: 50 10 100 + +* - Function + - Status + - Details +* - `isNaN(value)` + - ✅ + -

+* - `isFinite(value)` + - ✅ + -

+* - `abs(value)` + - ✅ + -

+* - `acos(value)` + - ✅ + -

+* - `asin(value)` + - ✅ + -

+* - `atan(value)` + - ✅ + -

+* - `atan2(dy, dx)` + - ❌ + -

+* - `ceil(value)` + - ✅ + -

+* - `clamp(value, min, max)` + - ❌ + -

+* - `cos(value)` + - ✅ + -

+* - `exp(exponent)` + - ✅ + -

+* - `floor(value)` + - ✅ + -

+* - `hypot(value)` + - ❌ + -

+* - `log(value)` + - ✅ + -

+* - `max(value1, value2, …)` + - ❌ + -

+* - `min(value1, value2, …)` + - ❌ + -

+* - `pow(value, exponent)` + - ✅ + -

+* - `random()` + - ❌ + -

+* - `round(value)` + - ✅ + -

+* - `sin(value)` + - ✅ + -

+* - `sqrt(value)` + - ✅ + -

+* - `tan(value)` + - ✅ + -

+::: + +## Statistical Functions +:::{list-table} +:header-rows: 1 +:widths: 80 10 40 + +* - Function + - Status + - Details +* - `sampleNormal([mean, stdev])` + - ❌ + -

+* - `cumulativeNormal(value[, mean, stdev])` + - ❌ + -

+* - `densityNormal(value[, mean, stdev])` + - ❌ + -

+* - `quantileNormal(probability[, mean, stdev])` + - ❌ + -

+* - `sampleLogNormal([mean, stdev])` + - ❌ + -

+* - `cumulativeLogNormal(value[, mean, stdev])` + - ❌ + -

+* - `densityLogNormal(value[, mean, stdev])` + - ❌ + -

+* - `quantileLogNormal(probability[, mean, stdev])` + - ❌ + -

+* - `sampleUniform([min, max])` + - ❌ + -

+* - `cumulativeUniform(value[, min, max])` + - ❌ + -

+* - `densityUniform(value[, min, max])` + - ❌ + -

+* - `quantileUniform(probability[, min, max])` + - ❌ + -

+::: + +## Date-Time Functions + +:::{list-table} +:header-rows: 1 +:widths: 120 10 40 + +* - Function + - Status + - Details +* - `now()` + - ❌ + -

+* - `datetime(year, month[, day, hour, min, sec, millisec])` + - ✅ + -

+* - `date(datetime)` + - ✅ + -

+* - `day(datetime)` + - ✅ + -

+* - `dayofyear(datetime)` + - ✅ + -

+* - `year(datetime)` + - ✅ + -

+* - `quarter(datetime)` + - ✅ + -

+* - `month(datetime)` + - ✅ + -

+* - `week(datetime)` + - ❌ + -

+* - `hours(datetime)` + - ✅ + -

+* - `minutes(datetime)` + - ✅ + -

+* - `seconds(datetime)` + - ✅ + -

+* - `milliseconds(datetime)` + - ✅ + -

+* - `time(datetime)` + - ✅ + -

+* - `timezoneoffset(datetime)` + - ❌ + -

+* - `timeOffset(unit, date[, step])` + - ✅ + -

+* - `timeSequence(unit, start, stop[, step])` + - ❌ + -

+* - `utc(year, month[, day, hour, min, sec, millisec])` + - ✅ + -

+* - `utcdate(datetime)` + - ✅ + -

+* - `utcday(datetime)` + - ✅ + -

+* - `utcdayofyear(datetime)` + - ✅ + -

+* - `utcyear(datetime)` + - ✅ + -

+* - `utcquarter(datetime)` + - ✅ + -

+* - `utcmonth(datetime)` + - ✅ + -

+* - `utcweek(datetime)` + - ❌ + -

+* - `utchours(datetime)` + - ✅ + -

+* - `utcminutes(datetime)` + - ✅ + -

+* - `utcseconds(datetime)` + - ✅ + -

+* - `utcmilliseconds(datetime)` + - ✅ + -

+* - `utcOffset(unit, date[, step])` + - ❌ + -

+* - `utcSequence(unit, start, stop[, step])` + - ❌ + -

+::: + +## Array Functions + +:::{list-table} +:header-rows: 1 +:widths: 80 10 100 + +* - Function + - Status + - Details +* - `extent(array)` + - ❌ + -

+* - `clampRange(range, min, max)` + - ❌ + -

+* - `indexof(array, value)` + - ✅ + -

+* - `inrange(value, range)` + - ❌ + -

+* - `join(array[, separator])` + - ❌ + -

+* - `lastindexof(array, value)` + - ❌ + -

+* - `length(array)` + - ✅ + -

+* - `lerp(array, fraction)` + - ❌ + -

+* - `peek(array)` + - ❌ + -

+* - `pluck(array, field)` + - ❌ + -

+* - `reverse(array)` + - ❌ + -

+* - `sequence([start, ]stop[, step])` + - ❌ + -

+* - `slice(array, start[, end])` + - ❌ + -

+* - `sort(array)` + - ❌ + -

+* - `span(array)` + - ✅ + -

+::: + +## String Functions + +:::{list-table} +:header-rows: 1 +:widths: 70 10 40 + +* - Function + - Status + - Details +* - `indexof(string, substring)` + - ❌ + -

+* - `lastindexof(string, substring)` + - ❌ + -

+* - `length(string)` + - ❌ + -

+* - `lower(string)` + - ❌ + -

+* - `pad(string, length[, character, align])` + - ❌ + -

+* - `parseFloat(string)` + - ❌ + -

+* - `parseInt(string)` + - ❌ + -

+* - `replace(string, pattern, replacement)` + - ❌ + -

+* - `slice(string, start[, end])` + - ❌ + -

+* - `split(string, separator[, limit])` + - ❌ + -

+* - `substring(string, start[, end])` + - ❌ + -

+* - `trim(string)` + - ❌ + -

+* - `truncate(string, length[, align, ellipsis])` + - ❌ + -

+* - `upper(string)` + - ❌ + -

+::: + + +## Object Functions +:::{list-table} +:header-rows: 1 +:widths: 100 10 60 + +* - Function + - Status + - Details +* - `merge(object1[, object2, …])` + - ❌ + -

+::: + +## Formatting Functions +:::{list-table} +:header-rows: 1 +:widths: 80 10 60 + +* - Function + - Status + - Details +* - `dayFormat(day)` + - ❌ + -

+* - `dayAbbrevFormat(day)` + - ❌ + -

+* - `format(value, specifier)` + - ✅ + -

+* - `monthFormat(month)` + - ❌ + -

+* - `monthAbbrevFormat(month)` + - ❌ + -

+* - `timeUnitSpecifier(units[, specifiers])` + - ❌ + -

+* - `timeFormat(value, specifier)` + - ✅ + -

+* - `timeParse(string, specifier)` + - ❌ + -

+* - `utcFormat(value, specifier)` + - ✅ + -

+* - `utcParse(value, specifier)` + - ❌ + -

+::: + +## RegExp Functions +:::{list-table} +:header-rows: 1 +:widths: 80 10 60 + +* - Function + - Status + - Details +* - `regexp(pattern[, flags])` + - ❌ + -

+* - `test(regexp[, string])` + - ❌ + -

+::: + + +## Color Functions +:::{list-table} +:header-rows: 1 +:widths: 60 10 60 + +* - Function + - Status + - Details +* - `rgb(r, g, b[, opacity])` + - ❌ + -

+* - `hsl(h, s, l[, opacity])` + - ❌ + -

+* - `lab(l, a, b[, opacity])` + - ❌ + -

+* - `hcl(h, c, l[, opacity])` + - ❌ + -

+* - `luminance(specifier)` + - ❌ + -

+* - `contrast(specifier1, specifier2)` + - ❌ + -

+::: + +## Event Functions +:::{list-table} +:header-rows: 1 +:widths: 50 10 100 + +* - Function + - Status + - Details +* - `item()` + - ❌ + -

+* - `group([name])` + - ❌ + -

+* - `xy([item])` + - ❌ + -

+* - `x([item])` + - ❌ + -

+* - `y([item])` + - ❌ + -

+* - `pinchDistance(event)` + - ❌ + -

+* - `pinchAngle(event)` + - ❌ + -

+* - `inScope(item)` + - ❌ + -

+::: + +## Data Functions +:::{list-table} +:header-rows: 1 +:widths: 60 10 60 + +* - Function + - Status + - Details +* - `data(name)` + - ✅ + -

+* - `indata(name, field, value)` + - ❌ + -

+* - `modify` + - ✅ + - :::{dropdown} More Info + This is a private function that Vega-Lite uses to implement + selections. + ::: +::: + +## Scale and Projection Functions +:::{list-table} +:header-rows: 1 +:widths: 80 10 40 + +* - Function + - Status + - Details +* - `scale(name, value[, group])` + - ❌ + -

+* - `invert(name, value[, group])` + - ❌ + -

+* - `copy(name[, group])` + - ❌ + -

+* - `domain(name[, group])` + - ❌ + -

+* - `range(name[, group])` + - ❌ + -

+* - `bandwidth(name[, group])` + - ❌ + -

+* - `bandspace(count[, paddingInner, paddingOuter])` + - ❌ + -

+* - `gradient(scale, p0, p1[, count])` + - ❌ + -

+* - `panLinear(domain, delta)` + - ❌ + -

+* - `panLog(domain, delta)` + - ❌ + -

+* - `panPow(domain, delta, exponent)` + - ❌ + -

+* - `panSymlog(domain, delta, constant)` + - ❌ + -

+* - `zoomLinear(domain, anchor, scaleFactor)` + - ❌ + -

+* - `zoomLog(domain, anchor, scaleFactor)` + - ❌ + -

+* - `zoomPow(domain, anchor, scaleFactor, exponent)` + - ❌ + -

+* - `zoomSymlog(domain, anchor, scaleFactor, constant)` + - ❌ + -

+::: + +## Geographic Functions +:::{list-table} +:header-rows: 1 +:widths: 60 10 40 + +* - Function + - Status + - Details +* - `geoArea(projection, feature[, group])` + - ❌ + -

+* - `geoBounds(projection, feature[, group])` + - ❌ + -

+* - `geoCentroid(projection, feature[, group])` + - ❌ + -

+* - `geoScale(projection[, group])` + - ❌ + -

+::: + +## Tree (Hierarchy) Functions +:::{list-table} +:header-rows: 1 +:widths: 60 10 60 + +* - Function + - Status + - Details +* - `treePath(name, source, target)` + - ❌ + -

+* - `treeAncestors(name, node)` + - ❌ + -

+::: + +## Browser Functions +:::{list-table} +:header-rows: 1 +:widths: 40 10 100 + +* - Function + - Status + - Details +* - `containerSize()` + - ❌ + -

+* - `screen()` + - ❌ + -

+* - `windowSize()` + - ❌ + -

+::: + +## Logging Functions +:::{list-table} +:header-rows: 1 +:widths: 50 10 70 + +* - Function + - Status + - Details +* - `warn(value1[, value2, …])` + - ❌ + -

+* - `info(value1[, value2, …])` + - ❌ + -

+* - `debug(value1[, value2, …])` + - ❌ + -

+::: + +## Selection Functions +These are private functions that Vega-Lite uses to implement selections. + +:::{list-table} +:header-rows: 1 +:widths: 50 10 100 + +* - Function + - Status + - Details +* - `vlSelectionTest` + - ✅ + -

+* - `vlSelectionResolve` + - ✅ + -

+::: diff --git a/docs/source/supported_transforms.md b/docs/source/supported_transforms.md new file mode 100644 index 00000000..40cd64b0 --- /dev/null +++ b/docs/source/supported_transforms.md @@ -0,0 +1,292 @@ +# Supported Transforms + +VegaFusion implements a subset of [Vega's transforms](https://vega.github.io/vega/). Below is a detailed breakdown of transform support status. + +:::{note} + +When a Vega spec includes unsupported transforms, these transforms will be included in the client Vega spec for evaluation by the standard Vega library in the browser. See [How it works](./how_it_works.md) for more details. + +::: + +> **Key**: +> - ✅: Full support for the transform and all its options +> - 🟡: Partial support with limitations +> - ❌: Transform is not currently supported + +## Basic Transforms + +:::{list-table} +:header-rows: 1 +:widths: 40 10 100 + +* - Transform + - Status + - Details +* - [aggregate](https://vega.github.io/vega/docs/transforms/aggregate/) + - 🟡 + - :::{dropdown} More Info + Supported aggregate `ops`: + - `count` + - `valid` + - `missing` + - `distinct` + - `sum` + - `mean` or `average` + - `variance` + - `variancep` + - `stdev` + - `stdevp` + - `median` + - `q1` + - `q3` + - `min` + - `max` + + Unsupported aggregate `ops`: + - `product` + - `ci0` + - `ci1` + - `stderr` + - `argmin` + - `argmax` + + The `cross`, `drop`, and `key` options are not yet supported. + ::: +* - [formula](https://vega.github.io/vega/docs/transforms/formula/) + - ✅ + - :::{dropdown} More Info + See [supported expressions](./supported_expressions.md) for details on supported + expression features that may be used in the `expr` field. + ::: +* - [window](https://vega.github.io/vega/docs/transforms/window/) + - 🟡 + - :::{dropdown} More Info + Supported window operations: + - Ranking operations: + - `row_number` + - `rank` + - `dense_rank` + - `percent_rank` + - `cume_dist` + - Value operations: + - `first_value` + - `last_value` + - All supported aggregate transform ops + + Not yet supported: + - `ntile` + - `lag`/`lead` + - `nth_value` + - `prev_value`/`next_value` + + All frame specifications and peer handling options are supported. + ::: +* - [lookup](https://vega.github.io/vega/docs/transforms/lookup/) + - ❌ + -

+* - [bin](https://vega.github.io/vega/docs/transforms/bin/) + - ✅ + - :::{dropdown} More Info + `interval` option ignored and both bin edges are always included. + ::: +* - [collect](https://vega.github.io/vega/docs/transforms/collect/) + - ✅ + -

+* - [extent](https://vega.github.io/vega/docs/transforms/extent/) + - ✅ + -

+* - [filter](https://vega.github.io/vega/docs/transforms/filter/) + - ✅ + - :::{dropdown} More Info + See [supported expressions](./supported_expressions.md) for details on supported + expression features that may be used in the `expr` field. + ::: +* - [flatten](https://vega.github.io/vega/docs/transforms/flatten/) + - ❌ + - :::{dropdown} More Info + May be possible in the future with DataFusion's + [unnest](https://github.com/apache/datafusion/pull/10044) transform. + ::: +* - [fold](https://vega.github.io/vega/docs/transforms/fold/) + - ✅ + -

+* - [project](https://vega.github.io/vega/docs/transforms/project/) + - ✅ + -

+* - [sequence](https://vega.github.io/vega/docs/transforms/sequence/) + - ✅ + -

+* - [timeunit](https://vega.github.io/vega/docs/transforms/timeunit/) + - 🟡 + - :::{dropdown} More Info + `interval` option ignored and both bin edges are always included. + + `step`, `extent`, and `maxbins` options are not supported, so `units` must be + provided. + ::: +* - [countpattern](https://vega.github.io/vega/docs/transforms/countpattern/) + - ❌ + -

+* - [cross](https://vega.github.io/vega/docs/transforms/cross/) + - ❌ + -

+* - [density](https://vega.github.io/vega/docs/transforms/density/) + - ❌ + -

+* - [dotbin](https://vega.github.io/vega/docs/transforms/dotbin/) + - ❌ + -

+* - [identifier](https://vega.github.io/vega/docs/transforms/identifier/) + - ✅ + -

+* - [impute](https://vega.github.io/vega/docs/transforms/impute/) + - 🟡 + - :::{dropdown} More Info + Supported: + - `field` - Field to impute + - `key` - Unique identifier field + - `value` - Custom value for imputation + - `groupby` - Group-based imputation + + Unsupported: + - `method` parameter with options other than `value` + - `keyvals` array for custom key values + ::: +* - [kde](https://vega.github.io/vega/docs/transforms/kde/) + - ❌ + -

+* - [loess](https://vega.github.io/vega/docs/transforms/loess/) + - ❌ + -

+* - [pivot](https://vega.github.io/vega/docs/transforms/pivot/) + - ✅ + -

+* - [quantile](https://vega.github.io/vega/docs/transforms/quantile/) + - ❌ + -

+* - [regression](https://vega.github.io/vega/docs/transforms/regression/) + - ❌ + -

+* - [sample](https://vega.github.io/vega/docs/transforms/sample/) + - ❌ + -

+::: + +## Geographic and Spatial Transforms + +:::{list-table} +:header-rows: 1 +:widths: 20 10 100 + +* - Transform + - Status + - Details +* - [contour](https://vega.github.io/vega/docs/transforms/contour/) + - ❌ + -

+* - [geojson](https://vega.github.io/vega/docs/transforms/geojson/) + - ❌ + -

+* - [geopath](https://vega.github.io/vega/docs/transforms/geopath/) + - ❌ + -

+* - [geopoint](https://vega.github.io/vega/docs/transforms/geopoint/) + - ❌ + -

+* - [geoshape](https://vega.github.io/vega/docs/transforms/geoshape/) + - ❌ + -

+* - [graticule](https://vega.github.io/vega/docs/transforms/graticule/) + - ❌ + -

+* - [heatmap](https://vega.github.io/vega/docs/transforms/heatmap/) + - ❌ + -

+* - [isocontour](https://vega.github.io/vega/docs/transforms/isocontour/) + - ❌ + -

+* - [kde2d](https://vega.github.io/vega/docs/transforms/kde2d/) + - ❌ + -

+::: + +## Layout Transforms + +:::{list-table} +:header-rows: 1 +:widths: 20 10 100 + +* - Transform + - Status + - Details +* - [stack](https://vega.github.io/vega/docs/transforms/stack/) + - ✅ + -

+* - [force](https://vega.github.io/vega/docs/transforms/force/) + - ❌ + -

+* - [label](https://vega.github.io/vega/docs/transforms/label/) + - ❌ + -

+* - [linkpath](https://vega.github.io/vega/docs/transforms/linkpath/) + - ❌ + -

+* - [pie](https://vega.github.io/vega/docs/transforms/pie/) + - ❌ + -

+* - [voronoi](https://vega.github.io/vega/docs/transforms/voronoi/) + - ❌ + -

+* - [wordcloud](https://vega.github.io/vega/docs/transforms/wordcloud/) + - ❌ + -

+::: + +## Hierarchy Transforms + +:::{list-table} +:header-rows: 1 +:widths: 20 10 100 + +* - Transform + - Status + - Details +* - [nest](https://vega.github.io/vega/docs/transforms/nest/) + - ❌ + -

+* - [stratify](https://vega.github.io/vega/docs/transforms/stratify/) + - ❌ + -

+* - [treelinks](https://vega.github.io/vega/docs/transforms/treelinks/) + - ❌ + -

+* - [pack](https://vega.github.io/vega/docs/transforms/pack/) + - ❌ + -

+* - [partition](https://vega.github.io/vega/docs/transforms/partition/) + - ❌ + -

+* - [tree](https://vega.github.io/vega/docs/transforms/tree/) + - ❌ + -

+* - [treemap](https://vega.github.io/vega/docs/transforms/treemap/) + - ❌ + -

+::: + +## Cross-Filter Transforms + +:::{list-table} +:header-rows: 1 +:widths: 20 10 100 + +* - Transform + - Status + - Details +* - [crossfilter](https://vega.github.io/vega/docs/transforms/crossfilter/) + - ❌ + -

+* - [resolvefilter](https://vega.github.io/vega/docs/transforms/resolvefilter/) + - ❌ + -

+::: diff --git a/pixi.lock b/pixi.lock index 7d761ee7..0f0a9832 100644 --- a/pixi.lock +++ b/pixi.lock @@ -273,6 +273,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-7.4.7-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-basic-ng-1.0.0b2-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-copybutton-0.5.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-design-0.6.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-applehelp-2.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-devhelp-2.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-htmlhelp-2.1.0-pyhd8ed1ab_0.conda @@ -569,6 +570,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-7.4.7-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-basic-ng-1.0.0b2-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-copybutton-0.5.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-design-0.6.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-applehelp-2.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-devhelp-2.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-htmlhelp-2.1.0-pyhd8ed1ab_0.conda @@ -879,6 +881,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-7.4.7-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-basic-ng-1.0.0b2-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-copybutton-0.5.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-design-0.6.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-applehelp-2.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-devhelp-2.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-htmlhelp-2.1.0-pyhd8ed1ab_0.conda @@ -1145,6 +1148,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-7.4.7-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-basic-ng-1.0.0b2-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-copybutton-0.5.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-design-0.6.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-applehelp-2.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-devhelp-2.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-htmlhelp-2.1.0-pyhd8ed1ab_0.conda @@ -13323,6 +13327,25 @@ packages: - pkg:pypi/sphinx-copybutton?source=hash-mapping size: 17801 timestamp: 1681468271927 +- kind: conda + name: sphinx-design + version: 0.6.1 + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/sphinx-design-0.6.1-pyhd8ed1ab_1.conda + sha256: 3db5d78271e3b0761db591111153f80428733972cab0bfdcf24b352133c85de9 + md5: db0f1eb28b6df3a11e89437597309009 + depends: + - python >=3.9 + - sphinx >=6,<9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/sphinx-design?source=hash-mapping + size: 916271 + timestamp: 1724519188841 - kind: conda name: sphinxcontrib-applehelp version: 2.0.0 diff --git a/pixi.toml b/pixi.toml index 5a6b2aaf..d49cbf90 100644 --- a/pixi.toml +++ b/pixi.toml @@ -152,7 +152,7 @@ sphinx = ">=7,<8" sphinx-copybutton = ">=0.5.0,<1" myst-parser = ">=4.0.0,<5" furo = ">=2024.8.6" - +sphinx-design = ">=0.6.0,<1" # Dependencies are those required at runtime by the Python packages [dependencies]