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:
@@ -146,6 +146,49 @@ register_element("selection-fields", "SelectionFields", SelectionFieldsProps)
|
||||
_SelectionFields = custom_element_builder("selection-fields")
|
||||
|
||||
|
||||
class RangeSliderProps(TypedDict):
|
||||
min: int
|
||||
max: int
|
||||
step: int
|
||||
mode: str # "range" | "point"
|
||||
|
||||
|
||||
register_element("range-slider", "RangeSlider", RangeSliderProps)
|
||||
_RangeSlider = custom_element_builder("range-slider")
|
||||
|
||||
|
||||
class DateRangePickerProps(TypedDict):
|
||||
pass
|
||||
|
||||
|
||||
register_element("date-range-picker", "DateRangePicker", DateRangePickerProps)
|
||||
_DateRangePicker = custom_element_builder("date-range-picker")
|
||||
|
||||
|
||||
class SearchSelectProps(TypedDict):
|
||||
name: str
|
||||
search_url: str
|
||||
multi: bool
|
||||
filter_mode: bool
|
||||
free_text: bool
|
||||
always_visible: bool
|
||||
prefetch: int
|
||||
sync_url: bool
|
||||
|
||||
|
||||
register_element("search-select", "SearchSelect", SearchSelectProps)
|
||||
_SearchSelect = custom_element_builder("search-select")
|
||||
|
||||
|
||||
class FilterBarProps(TypedDict):
|
||||
preset_list_url: str
|
||||
preset_save_url: str
|
||||
|
||||
|
||||
register_element("filter-bar", "FilterBar", FilterBarProps)
|
||||
_FilterBarElement = custom_element_builder("filter-bar")
|
||||
|
||||
|
||||
def SelectionFields(
|
||||
*,
|
||||
source: str,
|
||||
|
||||
Reference in New Issue
Block a user