@uwdata/mosaic-inputs 0.16.2 → 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  BSD 3-Clause License
2
2
 
3
- Copyright (c) 2023, UW Interactive Data Lab
3
+ Copyright (c) 2023-2025, UW Interactive Data Lab
4
4
 
5
5
  Redistribution and use in source and binary forms, with or without
6
6
  modification, are permitted provided that the following conditions are met:
package/README.md CHANGED
@@ -4,4 +4,4 @@
4
4
 
5
5
  Standalone data-driven components such as input menus, text search boxes, and sortable, load-on-scroll data tables. Input widgets integrate with Mosaic Params and Selections, and can either be used in a standalone fashion or draw values from a backing data table.
6
6
 
7
- The `mosaic-inputs` package is included as part of the [vgplot](https://github.com/uwdata/mosaic/tree/main/packages/vgplot) API.
7
+ The `mosaic-inputs` package is included as part of the [vgplot](https://github.com/uwdata/mosaic/tree/main/packages/vgplot/vgplot) API.
@@ -1,7 +1,7 @@
1
1
  export function menu(options?: {
2
2
  element?: HTMLElement;
3
3
  filterBy?: Selection;
4
- as?: Param;
4
+ as?: Param<any>;
5
5
  field?: string;
6
6
  options?: (any | {
7
7
  value: any;
@@ -48,7 +48,7 @@ export class Menu extends Input {
48
48
  constructor({ element, filterBy, as, from, column, label, format, options, value, field }?: {
49
49
  element?: HTMLElement;
50
50
  filterBy?: Selection;
51
- as?: Param;
51
+ as?: Param<any>;
52
52
  field?: string;
53
53
  options?: (any | {
54
54
  value: any;
@@ -64,7 +64,7 @@ export class Menu extends Input {
64
64
  column: string;
65
65
  format: (value: any) => string;
66
66
  field: string;
67
- selection: Param;
67
+ selection: Param<any>;
68
68
  select: HTMLSelectElement;
69
69
  data: any[];
70
70
  selectedValue(value: any, ...args: any[]): any;
@@ -77,3 +77,4 @@ export class Menu extends Input {
77
77
  import type { Selection } from '@uwdata/mosaic-core';
78
78
  import type { Param } from '@uwdata/mosaic-core';
79
79
  import { Input } from './input.js';
80
+ //# sourceMappingURL=Menu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Menu.d.ts","sourceRoot":"","sources":["../../src/Menu.js"],"names":[],"mappings":"AAqCO,+BAzBJ;IAA8B,OAAO,GAA7B,WAAW;IAES,QAAQ,GAA5B,SAAS;IAEO,EAAE;IAED,KAAK,GAAtB,MAAM;IAE6C,OAAO,GAA1D,CAAC,GAAG,GAAG;QAAE,KAAK,EAAE,GAAG,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE;IAIP,MAAM,GAAvC,CAAC,KAAK,EAAE,GAAG,KAAK,MAAM;IAIV,KAAK,GAAjB,GAAC;IACgB,IAAI,GAArB,MAAM;IAEW,MAAM,GAAvB,MAAM;IAGW,KAAK,GAAtB,MAAM;CACd,GAAU,WAAW,CAE2B;AAEnD;;;GAGG;AACH;IACE;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH,4FAxBG;QAA8B,OAAO,GAA7B,WAAW;QAES,QAAQ,GAA5B,SAAS;QAEO,EAAE;QAED,KAAK,GAAtB,MAAM;QAE6C,OAAO,GAA1D,CAAC,GAAG,GAAG;YAAE,KAAK,EAAE,GAAG,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,EAAE;QAIP,MAAM,GAAvC,CAAC,KAAK,EAAE,GAAG,KAAK,MAAM;QAIV,KAAK,GAAjB,GAAC;QACgB,IAAI,GAArB,MAAM;QAEW,MAAM,GAAvB,MAAM;QAGW,KAAK,GAAtB,MAAM;KAChB,EAiEA;IAnDC,aAAgB;IAChB,eAAoB;IACpB,gBA3BiB,GAAG,KAAK,MAAM,CA2BX;IACpB,cAAkB;IACA,sBAAmB;IAMrC,0BAA8C;IAK5C,YAAoE;IAsCxE,+CAYC;IAED,cAEC;IAQD,0BASC;IAED,gEASC;IAED,6BAIC;IAED,eAqBC;CACF;+BAnNqC,qBAAqB;2BAArB,qBAAqB;sBAG9B,YAAY"}
@@ -1,7 +1,7 @@
1
1
  export function search(options?: {
2
2
  element?: HTMLElement;
3
3
  filterBy?: Selection;
4
- as?: Param;
4
+ as?: Param<any>;
5
5
  field?: string;
6
6
  type?: "contains" | "prefix" | "suffix" | "regexp";
7
7
  from?: string;
@@ -41,7 +41,7 @@ export class Search extends Input {
41
41
  constructor({ element, filterBy, from, column, label, type, field, as }?: {
42
42
  element?: HTMLElement;
43
43
  filterBy?: Selection;
44
- as?: Param;
44
+ as?: Param<any>;
45
45
  field?: string;
46
46
  type?: "contains" | "prefix" | "suffix" | "regexp";
47
47
  from?: string;
@@ -52,7 +52,7 @@ export class Search extends Input {
52
52
  type: "contains" | "prefix" | "suffix" | "regexp";
53
53
  from: string;
54
54
  column: string;
55
- selection: Param;
55
+ selection: Param<any>;
56
56
  field: string;
57
57
  searchbox: HTMLInputElement;
58
58
  reset(): void;
@@ -67,3 +67,4 @@ export class Search extends Input {
67
67
  import type { Selection } from '@uwdata/mosaic-core';
68
68
  import type { Param } from '@uwdata/mosaic-core';
69
69
  import { Input } from './input.js';
70
+ //# sourceMappingURL=Search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Search.d.ts","sourceRoot":"","sources":["../../src/Search.js"],"names":[],"mappings":"AAiCO,iCAvBJ;IAA8B,OAAO,GAA7B,WAAW;IAES,QAAQ,GAA5B,SAAS;IAEO,EAAE;IAED,KAAK,GAAtB,MAAM;IAEgD,IAAI,GAA1D,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ;IAM1B,IAAI,GAArB,MAAM;IAGW,MAAM,GAAvB,MAAM;IAGW,KAAK,GAAtB,MAAM;CACd,GAAU,WAAW,CAE+B;AAEvD;;;GAGG;AACH;IACE;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,0EAtBG;QAA8B,OAAO,GAA7B,WAAW;QAES,QAAQ,GAA5B,SAAS;QAEO,EAAE;QAED,KAAK,GAAtB,MAAM;QAEgD,IAAI,GAA1D,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ;QAM1B,IAAI,GAArB,MAAM;QAGW,MAAM,GAAvB,MAAM;QAGW,KAAK,GAAtB,MAAM;KAChB,EAkDA;IAtCC,WAA6B;IAC7B,kDAAgB;IAChB,aAAgB;IAChB,eAAoB;IACpB,sBAAmB;IACnB,cAAkB;IASlB,4BAAgD;IA0BlD,cAEC;IAED,kEAGC;IAQD,0BAOC;IAED,gEAQC;IAED,6BAGC;IAFC,UAAgB;IAIlB,eAaC;IAH0B,8BAAoB;CAIhD;+BAzKqC,qBAAqB;2BAArB,qBAAqB;sBAG9B,YAAY"}
@@ -1,7 +1,7 @@
1
1
  export function slider(options?: {
2
2
  element?: HTMLElement;
3
3
  filterBy?: Selection;
4
- as?: Param;
4
+ as?: Param<any>;
5
5
  field?: string;
6
6
  select?: "point" | "interval";
7
7
  min?: number;
@@ -51,7 +51,7 @@ export class Slider extends Input {
51
51
  constructor({ element, filterBy, as, min, max, step, from, column, label, value, select, field, width }?: {
52
52
  element?: HTMLElement;
53
53
  filterBy?: Selection;
54
- as?: Param;
54
+ as?: Param<any>;
55
55
  field?: string;
56
56
  select?: "point" | "interval";
57
57
  min?: number;
@@ -66,7 +66,7 @@ export class Slider extends Input {
66
66
  id: string;
67
67
  from: string;
68
68
  column: string;
69
- selection: Param;
69
+ selection: Param<any>;
70
70
  selectionType: "point" | "interval";
71
71
  field: string;
72
72
  min: number;
@@ -82,3 +82,4 @@ export class Slider extends Input {
82
82
  import type { Selection } from '@uwdata/mosaic-core';
83
83
  import type { Param } from '@uwdata/mosaic-core';
84
84
  import { Input } from './input.js';
85
+ //# sourceMappingURL=Slider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Slider.d.ts","sourceRoot":"","sources":["../../src/Slider.js"],"names":[],"mappings":"AAsCO,iCA5BJ;IAA8B,OAAO,GAA7B,WAAW;IAES,QAAQ,GAA5B,SAAS;IAEO,EAAE;IAED,KAAK,GAAtB,MAAM;IAEyB,MAAM,GAArC,OAAO,GAAG,UAAU;IAKH,GAAG,GAApB,MAAM;IACW,GAAG,GAApB,MAAM;IACW,IAAI,GAArB,MAAM;IAEW,KAAK,GAAtB,MAAM;IACW,IAAI,GAArB,MAAM;IAGW,MAAM,GAAvB,MAAM;IAGW,KAAK,GAAtB,MAAM;IACW,KAAK,GAAtB,MAAM;CACd,GAAU,WAAW,CAE+B;AAEvD;;;GAGG;AACH;IACE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACH,0GA3BG;QAA8B,OAAO,GAA7B,WAAW;QAES,QAAQ,GAA5B,SAAS;QAEO,EAAE;QAED,KAAK,GAAtB,MAAM;QAEyB,MAAM,GAArC,OAAO,GAAG,UAAU;QAKH,GAAG,GAApB,MAAM;QACW,GAAG,GAApB,MAAM;QACW,IAAI,GAArB,MAAM;QAEW,KAAK,GAAtB,MAAM;QACW,IAAI,GAArB,MAAM;QAGW,MAAM,GAAvB,MAAM;QAGW,KAAK,GAAtB,MAAM;QACW,KAAK,GAAtB,MAAM;KAChB,EAgFA;IA/DC,WAA6B;IAC7B,aAAgB;IAChB,eAA+B;IAC/B,sBAAmB;IACnB,oCAA2B;IAC3B,cAAkB;IAClB,YAAc;IACd,YAAc;IACd,aAAgB;IAShB,yBAA6C;IAS7C,yBAA6C;IAuC/C,gEAOC;IAED,6BAeC;IAED,kEAcC;IAQD,0BAOC;CACF;+BApNmD,qBAAqB;2BAArB,qBAAqB;sBAG5C,YAAY"}
@@ -100,7 +100,10 @@ export class Table extends Input {
100
100
  requestData(offset?: number): void;
101
101
  schema: import("@uwdata/mosaic-core").FieldInfo[];
102
102
  formats: any;
103
- query(filter?: any[]): import("@uwdata/mosaic-sql").SelectQuery;
103
+ /**
104
+ * @param {FilterExpr} filter
105
+ */
106
+ query(filter?: FilterExpr): import("@uwdata/mosaic-sql").SelectQuery;
104
107
  queryResult(data: any): this;
105
108
  loaded: boolean;
106
109
  data: any[];
@@ -109,3 +112,5 @@ export class Table extends Input {
109
112
  }
110
113
  import type { Selection } from '@uwdata/mosaic-core';
111
114
  import { Input } from './input.js';
115
+ import type { FilterExpr } from '@uwdata/mosaic-sql';
116
+ //# sourceMappingURL=Table.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Table.d.ts","sourceRoot":"","sources":["../../src/Table.js"],"names":[],"mappings":"AA0CO,+BA5BJ;IAA8B,OAAO,GAA7B,WAAW;IAES,QAAQ,GAA5B,SAAS;IAEW,EAAE,GAAtB,SAAS;IAEiD,KAAK,GAA/D;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAA;KAAE;IAGM,MAAM,GAA3D;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,KAAK,EAAE,GAAG,KAAK,MAAM,CAAA;KAAE;IAIzB,IAAI,GAArB,MAAM;IAEa,OAAO,GAA1B,MAAM,EAAE;IAGsC,KAAK,GAAnD,MAAM,GAAG;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE;IAGlB,QAAQ,GAAzB,MAAM;IACW,MAAM,GAAvB,MAAM;IACW,QAAQ,GAAzB,MAAM;CAGd,GAAU,WAAW,CAE6B;AAErD;;;GAGG;AACH;IACE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACH,yGA3BG;QAA8B,OAAO,GAA7B,WAAW;QAES,QAAQ,GAA5B,SAAS;QAEW,EAAE,GAAtB,SAAS;QAEiD,KAAK,GAA/D;YAAE,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAA;SAAE;QAGM,MAAM,GAA3D;YAAE,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,KAAK,EAAE,GAAG,KAAK,MAAM,CAAA;SAAE;QAIzB,IAAI,GAArB,MAAM;QAEa,OAAO,GAA1B,MAAM,EAAE;QAGsC,KAAK,GAAnD,MAAM,GAAG;YAAE,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;SAAE;QAGlB,QAAQ,GAAzB,MAAM;QACW,MAAM,GAAvB,MAAM;QACW,QAAQ,GAAzB,MAAM;KAGhB,EAuFA;IAvEC,WAA0B;IAG1B,aAAgB;IAChB,kBAAsB;IACtB;gCAtCmC,GAAG,KAAK,MAAM;MAsC7B;IACpB;;MAAkB;IAClB;;MAAoD;IAOpD,eAAe;IACf,cAAsB;IACtB,mBAAsB;IAEtB,qBAAmB;IACnB,mBAAoB;IAEpB,gBAAsB;IACtB,gBAAsB;IACtB,kBAAqB;IAuBrB,sBAA0C;IAG1C,8BAA2C;IAG3C,8BAA2C;IAiB3C,wBAA4C;IAI9C,mBAEC;IAED,oEAQC;IAED,mCASC;IAOC,kDAAoB;IAgBpB,aAA4C;IAU9C;;OAEG;IACH,eAFW,UAAU,4CAUpB;IAED,6BAUC;IAPG,gBAAmB;IACnB,YAAc;IAQlB,eA2BC;IAQD,oCAsBC;CACF;+BAjT2C,qBAAqB;sBAMpC,YAAY;gCALV,oBAAoB"}
@@ -2,3 +2,4 @@ export { Menu, menu } from "./Menu.js";
2
2
  export { Search, search } from "./Search.js";
3
3
  export { Slider, slider } from "./Slider.js";
4
4
  export { Table, table } from "./Table.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.js"],"names":[],"mappings":""}
@@ -26,3 +26,4 @@ export class Input extends MosaicClient implements Activatable {
26
26
  }
27
27
  import type { Activatable } from '@uwdata/mosaic-core';
28
28
  import { MosaicClient } from '@uwdata/mosaic-core';
29
+ //# sourceMappingURL=input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../src/input.js"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,sBAL2C,CAAC,SAA/B,KAAM,GAAG,IAAI,EAAE,GAAG,KAAK,KAAM,cAC/B,CAAC,aACD,qBAAqB,CAAC,CAAC,CAAC,GACtB,WAAW,CAMvB;AAED;;;;GAIG;AACH;IACE;;;;;;OAMG;IACH,uBALW,OAAO,qBAAqB,EAAE,SAAS,YAEvC,WAAW,cACX,MAAM,EAOhB;IAHC,qBAAuD;IAKzD,iBAEC;CACF;iCArB6B,qBAAqB;6BAlBT,qBAAqB"}
@@ -6,3 +6,4 @@ export function formatLocaleAuto(locale?: string): any;
6
6
  export function formatLocaleNumber(locale?: string): any;
7
7
  export const formatAuto: any;
8
8
  export const formatNumber: any;
9
+ //# sourceMappingURL=format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../../src/util/format.js"],"names":[],"mappings":"AAGA,0CAEC;AAkBD,4CAYC;AAED,8CAEC;AAGD,mCAGU,eAAa,SAGtB;AAHQ,uDAEsB;AAFtB,yDAEsB;AA5B/B,6BAA6C;AAE7C,+BAAiD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uwdata/mosaic-inputs",
3
- "version": "0.16.2",
3
+ "version": "0.18.0",
4
4
  "description": "Mosaic input components.",
5
5
  "keywords": [
6
6
  "inputs",
@@ -10,25 +10,28 @@
10
10
  "author": "Jeffrey Heer (https://idl.uw.edu)",
11
11
  "type": "module",
12
12
  "exports": {
13
- "types": "./dist/types/index.d.ts",
13
+ "types": "./dist/src/index.d.ts",
14
14
  "default": "./src/index.js"
15
15
  },
16
+ "files": [
17
+ "dist",
18
+ "!dist/tsconfig.tsbuildinfo",
19
+ "src"
20
+ ],
16
21
  "repository": {
17
22
  "type": "git",
18
23
  "url": "https://github.com/uwdata/mosaic.git"
19
24
  },
20
25
  "scripts": {
21
- "prebuild": "rimraf dist && mkdir dist",
22
- "build": "npm run types",
23
- "types": "tsc -p tsconfig.json",
26
+ "clean": "rimraf dist && mkdir dist",
27
+ "prebuild": "npm run clean",
24
28
  "lint": "eslint src test",
25
- "test": "vitest run && npm run tsc",
26
- "tsc": "tsc -p jsconfig.json",
27
- "prepublishOnly": "npm run test && npm run lint && npm run build"
29
+ "test": "vitest run",
30
+ "prepublishOnly": "npm run test && npm run lint && tsc --build"
28
31
  },
29
32
  "dependencies": {
30
- "@uwdata/mosaic-core": "^0.16.2",
31
- "@uwdata/mosaic-sql": "^0.16.2"
33
+ "@uwdata/mosaic-core": "^0.18.0",
34
+ "@uwdata/mosaic-sql": "^0.18.0"
32
35
  },
33
- "gitHead": "26d2719f4bcab471d2831145e1f03f39f3509869"
36
+ "gitHead": "dfb9ded0b0307754e3185ca34cc49a1384fe8455"
34
37
  }
package/src/Slider.js CHANGED
@@ -1,4 +1,4 @@
1
- /** @import { Param, Selection } from '@uwdata/mosaic-core' */
1
+ /** @import { ClauseSource, Param, Selection } from '@uwdata/mosaic-core' */
2
2
  import { clauseInterval, clausePoint, isParam, isSelection } from '@uwdata/mosaic-core';
3
3
  import { Query, max, min } from '@uwdata/mosaic-sql';
4
4
  import { Input, input } from './input.js';
@@ -186,13 +186,13 @@ export class Slider extends Input {
186
186
  /** @type {[number, number]} */
187
187
  const domain = [this.min ?? 0, value];
188
188
  return clauseInterval(field, domain, {
189
- source: this,
189
+ source: /** @type {ClauseSource} */(this),
190
190
  bin: 'ceil',
191
191
  scale: { type: 'identity', domain },
192
192
  pixelSize: this.step
193
193
  });
194
194
  } else {
195
- return clausePoint(field, value, { source: this });
195
+ return clausePoint(field, value, { source: /** @type {ClauseSource} */(this) });
196
196
  }
197
197
  }
198
198
 
package/src/Table.js CHANGED
@@ -1,4 +1,7 @@
1
- /** @import { Selection } from '@uwdata/mosaic-core' */
1
+ /**
2
+ * @import { ClauseSource, Selection } from '@uwdata/mosaic-core'
3
+ * @import { FilterExpr } from '@uwdata/mosaic-sql'
4
+ */
2
5
  import { clausePoints, coordinator, isParam, isSelection, queryFieldInfo, toDataColumns } from '@uwdata/mosaic-core';
3
6
  import { Query, desc } from '@uwdata/mosaic-sql';
4
7
  import { formatDate, formatLocaleAuto, formatLocaleNumber } from './util/format.js';
@@ -122,7 +125,7 @@ export class Table extends Input {
122
125
  let prevScrollTop = -1;
123
126
  this.element.addEventListener('scroll', evt => {
124
127
  const { isPending, loaded } = this;
125
- // @ts-ignore
128
+ // @ts-expect-error unpack event
126
129
  const { scrollHeight, scrollTop, clientHeight } = evt.target;
127
130
 
128
131
  const back = scrollTop < prevScrollTop;
@@ -173,7 +176,7 @@ export class Table extends Input {
173
176
  const { columns } = data[~~(row / limit)];
174
177
  return fields.map(f => columns[f][row % limit]);
175
178
  });
176
- return clausePoints(fields, values, { source: this });
179
+ return clausePoints(fields, values, { source: /** @type {ClauseSource} */(this) });
177
180
  }
178
181
 
179
182
  requestData(offset = 0) {
@@ -218,6 +221,9 @@ export class Table extends Input {
218
221
  );
219
222
  }
220
223
 
224
+ /**
225
+ * @param {FilterExpr} filter
226
+ */
221
227
  query(filter = []) {
222
228
  const { limit, offset, schema, sortColumn, sortDesc } = this;
223
229
  return Query.from(this.sourceTable())
package/jsconfig.json DELETED
@@ -1,11 +0,0 @@
1
- {
2
- "include": ["src/**/*"],
3
- "compilerOptions": {
4
- "checkJs": true,
5
- "noEmit": true,
6
- "noImplicitAny": false,
7
- "module": "node16",
8
- "skipLibCheck": true,
9
- "types": []
10
- }
11
- }
package/tsconfig.json DELETED
@@ -1,11 +0,0 @@
1
- {
2
- "include": ["src/**/*.js", "src/**/*.ts"],
3
- "compilerOptions": {
4
- "allowJs": true,
5
- "declaration": true,
6
- "emitDeclarationOnly": true,
7
- "outDir": "dist/types",
8
- "module": "node16",
9
- "skipLibCheck": true
10
- }
11
- }
package/vitest.config.ts DELETED
@@ -1,3 +0,0 @@
1
- import { defineConfig } from 'vite';
2
-
3
- export default defineConfig({});