tree-element 0.1.0 → 0.1.1

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/README.md CHANGED
@@ -216,6 +216,22 @@ pnpm ci # lint, typecheck, check the docs and test
216
216
 
217
217
  `pnpm test` runs the vitest unit tests and the playwright browser tests.
218
218
 
219
+ ### Releasing
220
+
221
+ Describe the changes under "Unreleased" in `CHANGELOG.md` as you go. To release,
222
+ make sure `master` is pushed and CI is green, then run:
223
+
224
+ ```sh
225
+ pnpm release patch # or minor, major, or an explicit version
226
+ ```
227
+
228
+ Add `--dry-run` to see the version bump and changelog change without committing.
229
+
230
+ This bumps the version, moves the unreleased changes in the changelog to the new
231
+ version, commits, tags `v<version>` and pushes. The
232
+ [Release workflow](.github/workflows/release.yml) then runs the checks, publishes
233
+ to npm with provenance and creates the GitHub release.
234
+
219
235
  ## License
220
236
 
221
237
  Apache-2.0. See [LICENSE](LICENSE).
@@ -1 +1 @@
1
- {"version":3,"file":"dataLoader.d.ts","sourceRoot":"","sources":["../src/dataLoader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,KAAK,EAAE,IAAI,EAAY,MAAM,QAAQ,CAAC;AAC7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAE3C,UAAU,gBAAgB;IACtB,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,QAAQ,EAAE,QAAQ,CAAC;IACnB,WAAW,EAAE,WAAW,CAAC;IACzB,YAAY,EAAE,YAAY,CAAC;CAC9B;AAED,MAAM,CAAC,OAAO,OAAO,UAAU;IAC3B,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,UAAU,CAAC,CAAa;IAChC,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,YAAY,CAAe;gBAEvB,EACR,UAAU,EACV,UAAU,EACV,QAAQ,EACR,WAAW,EACX,YAAY,GACf,EAAE,gBAAgB;IASZ,MAAM,IAAI,IAAI;IAIR,WAAW,CACpB,GAAG,EAAE,UAAU,EACf,IAAI,CAAC,EAAE,IAAI,GACZ,OAAO,CAAC,IAAI,CAAC;CA+CnB"}
1
+ {"version":3,"file":"dataLoader.d.ts","sourceRoot":"","sources":["../src/dataLoader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,KAAK,EAAE,IAAI,EAAY,MAAM,QAAQ,CAAC;AAC7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAE3C,UAAU,gBAAgB;IACtB,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,QAAQ,EAAE,QAAQ,CAAC;IACnB,WAAW,EAAE,WAAW,CAAC;IACzB,YAAY,EAAE,YAAY,CAAC;CAC9B;AAED,MAAM,CAAC,OAAO,OAAO,UAAU;IAC3B,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,UAAU,CAAC,CAAa;IAChC,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,YAAY,CAAe;gBAEvB,EACR,UAAU,EACV,UAAU,EACV,QAAQ,EACR,WAAW,EACX,YAAY,GACf,EAAE,gBAAgB;IASZ,MAAM,IAAI,IAAI;IAIR,WAAW,CACpB,GAAG,EAAE,UAAU,EACf,IAAI,CAAC,EAAE,IAAI,GACZ,OAAO,CAAC,IAAI,CAAC;CAgDnB"}
package/lib/dataLoader.js CHANGED
@@ -60,7 +60,10 @@ class DataLoader {
60
60
  // The request was aborted by deinit.
61
61
  return;
62
62
  }
63
- throw error;
63
+ stopLoading();
64
+ this._triggerEvent("tree.load_failed", {
65
+ error
66
+ });
64
67
  });
65
68
  }
66
69
  }
@@ -1 +1 @@
1
- {"version":3,"file":"dataLoader.js","sources":["../src/dataLoader.ts"],"sourcesContent":["import type { ClassNames } from \"./classNames\";\nimport type { LoadData, TriggerEvent } from \"./methodTypes\";\nimport type { Node, NodeData } from \"./node\";\nimport type { DataFilter } from \"./options\";\nimport type RequestUrl from \"./requestUrl\";\n\ninterface DataLoaderParams {\n classNames: ClassNames;\n dataFilter?: DataFilter;\n loadData: LoadData;\n treeElement: HTMLElement;\n triggerEvent: TriggerEvent;\n}\n\nexport default class DataLoader {\n private abortController: AbortController;\n private classNames: ClassNames;\n private dataFilter?: DataFilter;\n private loadData: LoadData;\n private treeElement: HTMLElement;\n private triggerEvent: TriggerEvent;\n\n constructor({\n classNames,\n dataFilter,\n loadData,\n treeElement,\n triggerEvent,\n }: DataLoaderParams) {\n this.abortController = new AbortController();\n this.classNames = classNames;\n this.dataFilter = dataFilter;\n this.loadData = loadData;\n this.treeElement = treeElement;\n this.triggerEvent = triggerEvent;\n }\n\n public deinit(): void {\n this.abortController.abort();\n }\n\n public async loadFromUrl(\n url: RequestUrl,\n node?: Node,\n ): Promise<void> {\n const element = node?.element ?? this.treeElement;\n element.classList.add(this.classNames.loading);\n\n this.triggerEvent(\"tree.loading_data\", {\n element,\n node,\n });\n\n const stopLoading = (): void => {\n element.classList.remove(this.classNames.loading);\n this.triggerEvent(\"tree.loaded_data\", {\n element,\n node,\n });\n };\n\n const handleResponse = async (response: Response): Promise<void> => {\n if (response.ok) {\n const data = (await response.json()) as NodeData[];\n\n stopLoading();\n this.loadData(\n this.dataFilter ? this.dataFilter(data) : data,\n node\n );\n } else {\n stopLoading();\n\n this.triggerEvent(\"tree.load_failed\", { response });\n }\n };\n\n const signal = this.abortController.signal;\n url.setSearchParam(\"_\", Date.now().toString());\n\n return fetch(url.toString(), { headers: { \"Content-Type\": \"application/json\" }, signal })\n .then(handleResponse)\n .catch((error: unknown) => {\n if (this.abortController.signal.aborted) {\n // The request was aborted by deinit.\n return;\n }\n\n throw error;\n });\n }\n}\n"],"names":["abortController","classNames","dataFilter","loadData","treeElement","triggerEvent"],"mappings":"AAce,MAAM,UAAU,CAAC;EACpBA,gBAAe;EACfC,WAAU;EACVC,WAAU;EACVC,SAAQ;EACRC,YAAW;EACXC,aAAY;AAEpB,EAAA,WAAW,CAAC;IACR,UAAU;IACV,UAAU;IACV,QAAQ;IACR,WAAW;AACX,IAAA;AACc,GAAC,EAAE;AACjB,IAAA,IAAI,CAACL,gBAAe,GAAG,IAAI,eAAe,EAAE;IAC5C,IAAI,CAACC,WAAU,GAAG,UAAU;IAC5B,IAAI,CAACC,WAAU,GAAG,UAAU;IAC5B,IAAI,CAACC,SAAQ,GAAG,QAAQ;IACxB,IAAI,CAACC,YAAW,GAAG,WAAW;IAC9B,IAAI,CAACC,aAAY,GAAG,YAAY;AACpC,EAAA;AAEO,EAAA,MAAM,GAAS;AAClB,IAAA,IAAI,CAACL,gBAAe,CAAC,KAAK,EAAE;AAChC,EAAA;AAEA,EAAA,MAAa,WAAW,CACpB,GAAe,EACf,IAAW,EACE;IACb,MAAM,OAAO,GAAG,IAAI,EAAE,OAAO,IAAI,IAAI,CAACI,YAAW;IACjD,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAACH,WAAU,CAAC,OAAO,CAAC;AAE9C,IAAA,IAAI,CAACI,aAAY,CAAC,mBAAmB,EAAE;MACnC,OAAO;AACP,MAAA;AACJ,KAAC,CAAC;IAEF,MAAM,WAAW,GAAG,MAAY;MAC5B,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAACJ,WAAU,CAAC,OAAO,CAAC;AACjD,MAAA,IAAI,CAACI,aAAY,CAAC,kBAAkB,EAAE;QAClC,OAAO;AACP,QAAA;AACJ,OAAC,CAAC;IACN,CAAC;AAED,IAAA,MAAM,cAAc,GAAG,MAAO,QAAkB,IAAoB;MAChE,IAAI,QAAQ,CAAC,EAAE,EAAE;AACb,QAAA,MAAM,IAAI,GAAI,MAAM,QAAQ,CAAC,IAAI,EAAiB;AAElD,QAAA,WAAW,EAAE;AACb,QAAA,IAAI,CAACF,SAAQ,CACT,IAAI,CAACD,WAAU,GAAG,IAAI,CAACA,WAAU,CAAC,IAAI,CAAC,GAAG,IAAI,EAC9C,IACJ,CAAC;AACL,MAAA,CAAC,MAAM;AACH,QAAA,WAAW,EAAE;AAEb,QAAA,IAAI,CAACG,aAAY,CAAC,kBAAkB,EAAE;AAAE,UAAA;AAAS,SAAC,CAAC;AACvD,MAAA;IACJ,CAAC;AAED,IAAA,MAAM,MAAM,GAAG,IAAI,CAACL,gBAAe,CAAC,MAAM;AAC1C,IAAA,GAAG,CAAC,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;AAE9C,IAAA,OAAO,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE;AAAE,MAAA,OAAO,EAAE;AAAE,QAAA,cAAc,EAAE;OAAoB;AAAE,MAAA;KAAQ,CAAC,CACpF,IAAI,CAAC,cAAc,CAAC,CACpB,KAAK,CAAE,KAAc,IAAK;AACvB,MAAA,IAAI,IAAI,CAACA,gBAAe,CAAC,MAAM,CAAC,OAAO,EAAE;AACrC;AACA,QAAA;AACJ,MAAA;AAEA,MAAA,MAAM,KAAK;AACf,IAAA,CAAC,CAAC;AACV,EAAA;AACJ;;"}
1
+ {"version":3,"file":"dataLoader.js","sources":["../src/dataLoader.ts"],"sourcesContent":["import type { ClassNames } from \"./classNames\";\nimport type { LoadData, TriggerEvent } from \"./methodTypes\";\nimport type { Node, NodeData } from \"./node\";\nimport type { DataFilter } from \"./options\";\nimport type RequestUrl from \"./requestUrl\";\n\ninterface DataLoaderParams {\n classNames: ClassNames;\n dataFilter?: DataFilter;\n loadData: LoadData;\n treeElement: HTMLElement;\n triggerEvent: TriggerEvent;\n}\n\nexport default class DataLoader {\n private abortController: AbortController;\n private classNames: ClassNames;\n private dataFilter?: DataFilter;\n private loadData: LoadData;\n private treeElement: HTMLElement;\n private triggerEvent: TriggerEvent;\n\n constructor({\n classNames,\n dataFilter,\n loadData,\n treeElement,\n triggerEvent,\n }: DataLoaderParams) {\n this.abortController = new AbortController();\n this.classNames = classNames;\n this.dataFilter = dataFilter;\n this.loadData = loadData;\n this.treeElement = treeElement;\n this.triggerEvent = triggerEvent;\n }\n\n public deinit(): void {\n this.abortController.abort();\n }\n\n public async loadFromUrl(\n url: RequestUrl,\n node?: Node,\n ): Promise<void> {\n const element = node?.element ?? this.treeElement;\n element.classList.add(this.classNames.loading);\n\n this.triggerEvent(\"tree.loading_data\", {\n element,\n node,\n });\n\n const stopLoading = (): void => {\n element.classList.remove(this.classNames.loading);\n this.triggerEvent(\"tree.loaded_data\", {\n element,\n node,\n });\n };\n\n const handleResponse = async (response: Response): Promise<void> => {\n if (response.ok) {\n const data = (await response.json()) as NodeData[];\n\n stopLoading();\n this.loadData(\n this.dataFilter ? this.dataFilter(data) : data,\n node\n );\n } else {\n stopLoading();\n\n this.triggerEvent(\"tree.load_failed\", { response });\n }\n };\n\n const signal = this.abortController.signal;\n url.setSearchParam(\"_\", Date.now().toString());\n\n return fetch(url.toString(), { headers: { \"Content-Type\": \"application/json\" }, signal })\n .then(handleResponse)\n .catch((error: unknown) => {\n if (this.abortController.signal.aborted) {\n // The request was aborted by deinit.\n return;\n }\n\n stopLoading();\n this.triggerEvent(\"tree.load_failed\", { error });\n });\n }\n}\n"],"names":["abortController","classNames","dataFilter","loadData","treeElement","triggerEvent"],"mappings":"AAce,MAAM,UAAU,CAAC;EACpBA,gBAAe;EACfC,WAAU;EACVC,WAAU;EACVC,SAAQ;EACRC,YAAW;EACXC,aAAY;AAEpB,EAAA,WAAW,CAAC;IACR,UAAU;IACV,UAAU;IACV,QAAQ;IACR,WAAW;AACX,IAAA;AACc,GAAC,EAAE;AACjB,IAAA,IAAI,CAACL,gBAAe,GAAG,IAAI,eAAe,EAAE;IAC5C,IAAI,CAACC,WAAU,GAAG,UAAU;IAC5B,IAAI,CAACC,WAAU,GAAG,UAAU;IAC5B,IAAI,CAACC,SAAQ,GAAG,QAAQ;IACxB,IAAI,CAACC,YAAW,GAAG,WAAW;IAC9B,IAAI,CAACC,aAAY,GAAG,YAAY;AACpC,EAAA;AAEO,EAAA,MAAM,GAAS;AAClB,IAAA,IAAI,CAACL,gBAAe,CAAC,KAAK,EAAE;AAChC,EAAA;AAEA,EAAA,MAAa,WAAW,CACpB,GAAe,EACf,IAAW,EACE;IACb,MAAM,OAAO,GAAG,IAAI,EAAE,OAAO,IAAI,IAAI,CAACI,YAAW;IACjD,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAACH,WAAU,CAAC,OAAO,CAAC;AAE9C,IAAA,IAAI,CAACI,aAAY,CAAC,mBAAmB,EAAE;MACnC,OAAO;AACP,MAAA;AACJ,KAAC,CAAC;IAEF,MAAM,WAAW,GAAG,MAAY;MAC5B,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAACJ,WAAU,CAAC,OAAO,CAAC;AACjD,MAAA,IAAI,CAACI,aAAY,CAAC,kBAAkB,EAAE;QAClC,OAAO;AACP,QAAA;AACJ,OAAC,CAAC;IACN,CAAC;AAED,IAAA,MAAM,cAAc,GAAG,MAAO,QAAkB,IAAoB;MAChE,IAAI,QAAQ,CAAC,EAAE,EAAE;AACb,QAAA,MAAM,IAAI,GAAI,MAAM,QAAQ,CAAC,IAAI,EAAiB;AAElD,QAAA,WAAW,EAAE;AACb,QAAA,IAAI,CAACF,SAAQ,CACT,IAAI,CAACD,WAAU,GAAG,IAAI,CAACA,WAAU,CAAC,IAAI,CAAC,GAAG,IAAI,EAC9C,IACJ,CAAC;AACL,MAAA,CAAC,MAAM;AACH,QAAA,WAAW,EAAE;AAEb,QAAA,IAAI,CAACG,aAAY,CAAC,kBAAkB,EAAE;AAAE,UAAA;AAAS,SAAC,CAAC;AACvD,MAAA;IACJ,CAAC;AAED,IAAA,MAAM,MAAM,GAAG,IAAI,CAACL,gBAAe,CAAC,MAAM;AAC1C,IAAA,GAAG,CAAC,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;AAE9C,IAAA,OAAO,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE;AAAE,MAAA,OAAO,EAAE;AAAE,QAAA,cAAc,EAAE;OAAoB;AAAE,MAAA;KAAQ,CAAC,CACpF,IAAI,CAAC,cAAc,CAAC,CACpB,KAAK,CAAE,KAAc,IAAK;AACvB,MAAA,IAAI,IAAI,CAACA,gBAAe,CAAC,MAAM,CAAC,OAAO,EAAE;AACrC;AACA,QAAA;AACJ,MAAA;AAEA,MAAA,WAAW,EAAE;AACb,MAAA,IAAI,CAACK,aAAY,CAAC,kBAAkB,EAAE;AAAE,QAAA;AAAM,OAAC,CAAC;AACpD,IAAA,CAAC,CAAC;AACV,EAAA;AACJ;;"}
package/lib/events.d.ts CHANGED
@@ -194,19 +194,26 @@ export interface TreeEvents {
194
194
  node?: Node;
195
195
  };
196
196
  /**
197
- * Dispatched when a request returns an error status, after
198
- * `tree.loaded_data`:
197
+ * Dispatched when a request returns an error status or fails with a
198
+ * network error, after `tree.loaded_data`:
199
199
  *
200
200
  * ```js
201
201
  * element.addEventListener("tree.load_failed", (e) => {
202
- * console.error("loading the tree failed", e.detail.response.status);
202
+ * if (e.detail.response) {
203
+ * console.error("loading the tree failed", e.detail.response.status);
204
+ * } else {
205
+ * console.error("loading the tree failed", e.detail.error);
206
+ * }
203
207
  * });
204
208
  * ```
205
209
  *
206
210
  * @group Loading data
207
211
  */
208
212
  "tree.load_failed": {
209
- response: Response;
213
+ /** The error thrown by `fetch`, if the request failed with a network error. */
214
+ error?: unknown;
215
+ /** The response, if the request returned an error status. */
216
+ response?: Response;
210
217
  };
211
218
  }
212
219
  type TreeEventMap = {
@@ -1 +1 @@
1
- {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAEvD,MAAM,WAAW,QAAQ;IACrB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,SAAS,EAAE,IAAI,CAAC;IAChB,aAAa,EAAE,KAAK,CAAC;IACrB,QAAQ,EAAE,QAAQ,CAAC;IACnB,cAAc,EAAE,IAAI,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,IAAI,CAAC;CACpB;AAGD,MAAM,MAAM,SAAS,CAAC,IAAI,SAAS,aAAa,GAAG,aAAa,IAAI,WAAW,CAC3E,UAAU,CAAC,IAAI,CAAC,CACnB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,MAAM,UAAU,CAAC;AAO7C,MAAM,WAAW,UAAU;IACvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,WAAW,EAAE,SAAS,CAAC;IACvB;;;;OAIG;IACH,cAAc,EAAE,SAAS,CAAC;IAC1B;;;;;;;;;;;;OAYG;IACH,YAAY,EAAE;QACV,IAAI,EAAE,IAAI,CAAC;QACX,aAAa,EAAE,UAAU,CAAC;KAC7B,CAAC;IACF;;;;OAIG;IACH,eAAe,EAAE;QACb,IAAI,EAAE,IAAI,CAAC;QACX,aAAa,EAAE,UAAU,CAAC;KAC7B,CAAC;IACF;;;;;OAKG;IACH,kBAAkB,EAAE;QAChB,IAAI,EAAE,IAAI,CAAC;QACX,aAAa,EAAE,UAAU,CAAC;KAC7B,CAAC;IACF;;;;OAIG;IACH,WAAW,EAAE;QACT,IAAI,EAAE,IAAI,CAAC;KACd,CAAC;IACF;;;;OAIG;IACH,YAAY,EAAE;QACV,IAAI,EAAE,IAAI,CAAC;KACd,CAAC;IACF;;;;;;;;;;;;OAYG;IACH,aAAa,EAAE;QACX,iDAAiD;QACjD,cAAc,EAAE,IAAI,GAAG,IAAI,CAAC;QAC5B,qCAAqC;QACrC,IAAI,EAAE,IAAI,CAAC;KACd,CAAC;IACF;;;;;;;;;;;;;;;;;;OAkBG;IACH,eAAe,EAAE;QACb,IAAI,EAAE,IAAI,CAAC;KACd,CAAC;IACF;;;;;;;;;;;;;;;;;OAiBG;IACH,WAAW,EAAE;QACT,iDAAiD;QACjD,QAAQ,EAAE,QAAQ,CAAC;KACtB,CAAC;IACF;;;;;OAKG;IACH,eAAe,EAAE;QACb,kEAAkE;QAClE,IAAI,CAAC,EAAE,IAAI,CAAC;QACZ,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;KACzB,CAAC;IACF;;;;OAIG;IACH,mBAAmB,EAAE;QACjB,OAAO,EAAE,WAAW,CAAC;QACrB,+DAA+D;QAC/D,IAAI,CAAC,EAAE,IAAI,CAAC;KACf,CAAC;IACF;;;;;OAKG;IACH,kBAAkB,EAAE;QAChB,OAAO,EAAE,WAAW,CAAC;QACrB,gEAAgE;QAChE,IAAI,CAAC,EAAE,IAAI,CAAC;KACf,CAAC;IACF;;;;;;;;;;;OAWG;IACH,kBAAkB,EAAE;QAChB,QAAQ,EAAE,QAAQ,CAAC;KACtB,CAAC;CACL;AAGD,KAAK,YAAY,GAAG;KACf,IAAI,IAAI,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC;CAC3C,CAAC;AAGF,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,gBAAiB,SAAQ,YAAY;KAAI;IAEnD,UAAU,mBAAoB,SAAQ,YAAY;KAAI;IAEtD,UAAU,cAAe,SAAQ,YAAY;KAAI;CACpD"}
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAEvD,MAAM,WAAW,QAAQ;IACrB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,SAAS,EAAE,IAAI,CAAC;IAChB,aAAa,EAAE,KAAK,CAAC;IACrB,QAAQ,EAAE,QAAQ,CAAC;IACnB,cAAc,EAAE,IAAI,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,IAAI,CAAC;CACpB;AAGD,MAAM,MAAM,SAAS,CAAC,IAAI,SAAS,aAAa,GAAG,aAAa,IAAI,WAAW,CAC3E,UAAU,CAAC,IAAI,CAAC,CACnB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,MAAM,UAAU,CAAC;AAO7C,MAAM,WAAW,UAAU;IACvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,WAAW,EAAE,SAAS,CAAC;IACvB;;;;OAIG;IACH,cAAc,EAAE,SAAS,CAAC;IAC1B;;;;;;;;;;;;OAYG;IACH,YAAY,EAAE;QACV,IAAI,EAAE,IAAI,CAAC;QACX,aAAa,EAAE,UAAU,CAAC;KAC7B,CAAC;IACF;;;;OAIG;IACH,eAAe,EAAE;QACb,IAAI,EAAE,IAAI,CAAC;QACX,aAAa,EAAE,UAAU,CAAC;KAC7B,CAAC;IACF;;;;;OAKG;IACH,kBAAkB,EAAE;QAChB,IAAI,EAAE,IAAI,CAAC;QACX,aAAa,EAAE,UAAU,CAAC;KAC7B,CAAC;IACF;;;;OAIG;IACH,WAAW,EAAE;QACT,IAAI,EAAE,IAAI,CAAC;KACd,CAAC;IACF;;;;OAIG;IACH,YAAY,EAAE;QACV,IAAI,EAAE,IAAI,CAAC;KACd,CAAC;IACF;;;;;;;;;;;;OAYG;IACH,aAAa,EAAE;QACX,iDAAiD;QACjD,cAAc,EAAE,IAAI,GAAG,IAAI,CAAC;QAC5B,qCAAqC;QACrC,IAAI,EAAE,IAAI,CAAC;KACd,CAAC;IACF;;;;;;;;;;;;;;;;;;OAkBG;IACH,eAAe,EAAE;QACb,IAAI,EAAE,IAAI,CAAC;KACd,CAAC;IACF;;;;;;;;;;;;;;;;;OAiBG;IACH,WAAW,EAAE;QACT,iDAAiD;QACjD,QAAQ,EAAE,QAAQ,CAAC;KACtB,CAAC;IACF;;;;;OAKG;IACH,eAAe,EAAE;QACb,kEAAkE;QAClE,IAAI,CAAC,EAAE,IAAI,CAAC;QACZ,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;KACzB,CAAC;IACF;;;;OAIG;IACH,mBAAmB,EAAE;QACjB,OAAO,EAAE,WAAW,CAAC;QACrB,+DAA+D;QAC/D,IAAI,CAAC,EAAE,IAAI,CAAC;KACf,CAAC;IACF;;;;;OAKG;IACH,kBAAkB,EAAE;QAChB,OAAO,EAAE,WAAW,CAAC;QACrB,gEAAgE;QAChE,IAAI,CAAC,EAAE,IAAI,CAAC;KACf,CAAC;IACF;;;;;;;;;;;;;;;OAeG;IACH,kBAAkB,EAAE;QAChB,+EAA+E;QAC/E,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,6DAA6D;QAC7D,QAAQ,CAAC,EAAE,QAAQ,CAAC;KACvB,CAAC;CACL;AAGD,KAAK,YAAY,GAAG;KACf,IAAI,IAAI,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC;CAC3C,CAAC;AAGF,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,gBAAiB,SAAQ,YAAY;KAAI;IAEnD,UAAU,mBAAoB,SAAQ,YAAY;KAAI;IAEtD,UAAU,cAAe,SAAQ,YAAY;KAAI;CACpD"}
package/lib/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*
2
- Html-tree 0.1.0
2
+ Html-tree 0.1.1
3
3
 
4
4
  Copyright 2026 Marco Braak
5
5
 
package/lib/version.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- declare const version = "0.1.0";
1
+ declare const version = "0.1.1";
2
2
  export default version;
3
3
  //# sourceMappingURL=version.d.ts.map
package/lib/version.js CHANGED
@@ -1,5 +1,5 @@
1
1
  // Generated by config/generateVersion.mjs. Do not edit.
2
- const version = "0.1.0";
2
+ const version = "0.1.1";
3
3
 
4
4
  export { version as default };
5
5
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sources":["../src/version.ts"],"sourcesContent":["// Generated by config/generateVersion.mjs. Do not edit.\nconst version = \"0.1.0\";\n\nexport default version;\n"],"names":[],"mappings":"AAAA;AACA,MAAM,OAAO,GAAG;;"}
1
+ {"version":3,"file":"version.js","sources":["../src/version.ts"],"sourcesContent":["// Generated by config/generateVersion.mjs. Do not edit.\nconst version = \"0.1.1\";\n\nexport default version;\n"],"names":[],"mappings":"AAAA;AACA,MAAM,OAAO,GAAG;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tree-element",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "Tree widget in plain javascript",
5
5
  "keywords": [
6
6
  "tree"
@@ -49,6 +49,8 @@
49
49
  "prettier": "prettier src/*.ts --write --tab-width 4",
50
50
  "tsc": "tsc --noEmit --project tsconfig.json",
51
51
  "version": "node config/generateVersion.mjs && git add src/version.ts",
52
+ "prepublishOnly": "pnpm run production",
53
+ "release": "node config/release.mjs",
52
54
  "playwright": "pnpm build-with-coverage && playwright test --config playwright/playwright.config.js",
53
55
  "test": "pnpm vitest && pnpm playwright",
54
56
  "docs-check": "kiira check"
package/src/dataLoader.ts CHANGED
@@ -86,7 +86,8 @@ export default class DataLoader {
86
86
  return;
87
87
  }
88
88
 
89
- throw error;
89
+ stopLoading();
90
+ this.triggerEvent("tree.load_failed", { error });
90
91
  });
91
92
  }
92
93
  }
package/src/events.ts CHANGED
@@ -206,19 +206,26 @@ export interface TreeEvents {
206
206
  node?: Node;
207
207
  };
208
208
  /**
209
- * Dispatched when a request returns an error status, after
210
- * `tree.loaded_data`:
209
+ * Dispatched when a request returns an error status or fails with a
210
+ * network error, after `tree.loaded_data`:
211
211
  *
212
212
  * ```js
213
213
  * element.addEventListener("tree.load_failed", (e) => {
214
- * console.error("loading the tree failed", e.detail.response.status);
214
+ * if (e.detail.response) {
215
+ * console.error("loading the tree failed", e.detail.response.status);
216
+ * } else {
217
+ * console.error("loading the tree failed", e.detail.error);
218
+ * }
215
219
  * });
216
220
  * ```
217
221
  *
218
222
  * @group Loading data
219
223
  */
220
224
  "tree.load_failed": {
221
- response: Response;
225
+ /** The error thrown by `fetch`, if the request failed with a network error. */
226
+ error?: unknown;
227
+ /** The response, if the request returned an error status. */
228
+ response?: Response;
222
229
  };
223
230
  }
224
231
  /* eslint-enable perfectionist/sort-interfaces */
package/src/version.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  // Generated by config/generateVersion.mjs. Do not edit.
2
- const version = "0.1.0";
2
+ const version = "0.1.1";
3
3
 
4
4
  export default version;
@@ -1,5 +1,5 @@
1
1
  /*
2
- Html-tree 0.1.0
2
+ Html-tree 0.1.1
3
3
 
4
4
  Copyright 2026 Marco Braak
5
5
 
@@ -119,7 +119,10 @@ var TreeElement = (function () {
119
119
  // The request was aborted by deinit.
120
120
  return;
121
121
  }
122
- throw error;
122
+ stopLoading();
123
+ this._triggerEvent("tree.load_failed", {
124
+ error
125
+ });
123
126
  });
124
127
  }
125
128
  }
@@ -3086,7 +3089,7 @@ var TreeElement = (function () {
3086
3089
  };
3087
3090
 
3088
3091
  // Generated by config/generateVersion.mjs. Do not edit.
3089
- const version = "0.1.0";
3092
+ const version = "0.1.1";
3090
3093
 
3091
3094
  // The types that appear in the public api. Consumers cannot import them from
3092
3095
  // the submodules directly, because those are not exposed in package.json.