Convert onSwap widgets to custom elements (issue #18)
Replaces the four onSwap-based widgets with TypeScript custom elements following the pattern from PR #16. Each widget gets a class extending HTMLElement with connectedCallback/disconnectedCallback, typed props via register_element + gen_element_types codegen, and lives in ts/elements/. - range-slider: RangeSliderElement; Python uses _RangeSlider builder - date-range-picker: DateRangePickerElement; Python uses _DateRangePicker builder - search-select: SearchSelectElement; Python uses _SearchSelect builder; data-* attrs become plain attrs (data-name -> name, data-search-url -> search-url, etc.) - filter-bar: FilterBarElement; props carry preset URLs; onclick/onsubmit attrs replaced with data-filter-bar-* sentinel attrs; all window.* globals removed Deletes ts/range_slider.ts, ts/search_select.ts, ts/date_range_picker.ts, ts/filter_bar.ts. Updates all tests and e2e pages to use the new element selectors and script paths (dist/elements/<tag>.js). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -2,7 +2,7 @@ import { readSelectionFieldsProps, SelectionFieldsProps } from "../generated/pro
|
||||
|
||||
/**
|
||||
* Renders one form field per selected item of a source SearchSelect (matched by
|
||||
* its data-name). Reacts to the SearchSelect's "search-select:change" event and
|
||||
* its name attribute). Reacts to the SearchSelect's "search-select:change" event and
|
||||
* to its own "active" attribute. Typed values are preserved (keyed by item id)
|
||||
* across selection changes and active toggling.
|
||||
*/
|
||||
@@ -24,7 +24,7 @@ class SelectionFieldsElement extends HTMLElement {
|
||||
connectedCallback(): void {
|
||||
this.props = readSelectionFieldsProps(this);
|
||||
this.source = document.querySelector<HTMLElement>(
|
||||
`[data-search-select][data-name="${this.props.source}"]`,
|
||||
`search-select[name="${this.props.source}"]`,
|
||||
);
|
||||
document.addEventListener("search-select:change", this.onSourceChange);
|
||||
this.render();
|
||||
|
||||
Reference in New Issue
Block a user