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]