diff --git a/adapters/solid/LICENSE b/adapters/solid/LICENSE new file mode 100644 index 0000000..14f72e2 --- /dev/null +++ b/adapters/solid/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 Alexander van Elsas + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/adapters/solid/README.md b/adapters/solid/README.md new file mode 100644 index 0000000..9000964 --- /dev/null +++ b/adapters/solid/README.md @@ -0,0 +1,83 @@ +# @vanelsas/baredom-solid + +Solid 1.x wrapper components for [BareDOM](https://github.com/avanelsas/baredom) — auto-generated from component metadata. + +Provides typed props, event handlers, ref forwarding, and signal-friendly controlled inputs for all BareDOM web components. + +## Installation + +```bash +npm install @vanelsas/baredom-solid @vanelsas/baredom solid-js +``` + +Solid's JSX compiler (`vite-plugin-solid`, `babel-preset-solid`, or `esbuild-plugin-solid`) must be configured in your project — this is the standard Solid setup. + +## Usage + +```tsx +import { XButton } from "@vanelsas/baredom-solid/x-button"; +import { XAlert } from "@vanelsas/baredom-solid/x-alert"; +import { XTheme } from "@vanelsas/baredom-solid/x-theme"; + +function App() { + return ( + + console.log("Pressed!", e.detail.source)} + > + Click me + + + console.log("Dismissed")} + /> + + ); +} +``` + +## Controlled inputs with signals + +Form-control components (`XCheckbox`, `XSlider`, `XSelect`, `XSwitch`, `XRadio`, `XTextArea`, `XCombobox`, `XCurrencyField`, `XTabs`, `XPagination`) support a controlled mode driven by Solid signals. Supply the control prop (`checked` / `value` / `page`) plus a handler that updates it; the wrapper intercepts the cancelable change-request event and prevents the default DOM commit, so the signal is the single source of truth. + +```tsx +import { createSignal } from "solid-js"; +import { XCheckbox } from "@vanelsas/baredom-solid/x-checkbox"; + +function ControlledExample() { + const [checked, setChecked] = createSignal(false); + return ( + setChecked(e.detail.checked)} + > + Subscribe + + ); +} +``` + +Pass `defaultChecked` / `defaultValue` / `defaultPage` instead for uncontrolled mode — the wrapper writes the initial attribute and lets the component manage its own state. + +## Theme presets + +```tsx +import { useRegisterPreset } from "@vanelsas/baredom-solid/composables"; +import { XTheme } from "@vanelsas/baredom-solid/x-theme"; + +function App() { + useRegisterPreset("brand", { + light: { "--x-color-primary": "#e11d48" }, + dark: { "--x-color-primary": "#fb7185" }, + }); + return ...; +} +``` + +## License + +MIT diff --git a/adapters/solid/package.json b/adapters/solid/package.json new file mode 100644 index 0000000..abaa7d3 --- /dev/null +++ b/adapters/solid/package.json @@ -0,0 +1,460 @@ +{ + "description" : "Solid 1.x wrapper components for BareDOM — auto-generated from component metadata.", + "repository" : { + "type" : "git", + "url" : "https://github.com/avanelsas/baredom.git", + "directory" : "adapters/solid" + }, + "license" : "MIT", + "peerDependencies" : { + "@vanelsas/baredom" : ">=2.6.0", + "solid-js" : ">=1.9.0" + }, + "name" : "@vanelsas/baredom-solid", + "scripts" : { + "generate" : "cd ../.. && bb scripts/generate_solid.bb", + "build" : "npm run generate && tsc", + "check" : "tsc --noEmit" + }, + "publishConfig" : { + "access" : "public" + }, + "type" : "module", + "types" : "./dist/index.d.ts", + "author" : "Alexander van Elsas", + "exports" : { + "." : { + "import" : "./dist/index.js", + "types" : "./dist/index.d.ts" + }, + "./composables" : { + "import" : "./dist/composables/index.js", + "types" : "./dist/composables/index.d.ts" + }, + "./x-alert" : { + "import" : "./dist/x-alert.jsx", + "types" : "./dist/x-alert.d.ts" + }, + "./x-avatar" : { + "import" : "./dist/x-avatar.jsx", + "types" : "./dist/x-avatar.d.ts" + }, + "./x-avatar-group" : { + "import" : "./dist/x-avatar-group.jsx", + "types" : "./dist/x-avatar-group.d.ts" + }, + "./x-badge" : { + "import" : "./dist/x-badge.jsx", + "types" : "./dist/x-badge.d.ts" + }, + "./x-bento-grid" : { + "import" : "./dist/x-bento-grid.jsx", + "types" : "./dist/x-bento-grid.d.ts" + }, + "./x-bento-item" : { + "import" : "./dist/x-bento-item.jsx", + "types" : "./dist/x-bento-item.d.ts" + }, + "./x-breadcrumbs" : { + "import" : "./dist/x-breadcrumbs.jsx", + "types" : "./dist/x-breadcrumbs.d.ts" + }, + "./x-button" : { + "import" : "./dist/x-button.jsx", + "types" : "./dist/x-button.d.ts" + }, + "./x-calendar" : { + "import" : "./dist/x-calendar.jsx", + "types" : "./dist/x-calendar.d.ts" + }, + "./x-cancel-dialogue" : { + "import" : "./dist/x-cancel-dialogue.jsx", + "types" : "./dist/x-cancel-dialogue.d.ts" + }, + "./x-card" : { + "import" : "./dist/x-card.jsx", + "types" : "./dist/x-card.d.ts" + }, + "./x-carousel" : { + "import" : "./dist/x-carousel.jsx", + "types" : "./dist/x-carousel.d.ts" + }, + "./x-chart" : { + "import" : "./dist/x-chart.jsx", + "types" : "./dist/x-chart.d.ts" + }, + "./x-checkbox" : { + "import" : "./dist/x-checkbox.jsx", + "types" : "./dist/x-checkbox.d.ts" + }, + "./x-chip" : { + "import" : "./dist/x-chip.jsx", + "types" : "./dist/x-chip.d.ts" + }, + "./x-code" : { + "import" : "./dist/x-code.jsx", + "types" : "./dist/x-code.d.ts" + }, + "./x-collapse" : { + "import" : "./dist/x-collapse.jsx", + "types" : "./dist/x-collapse.d.ts" + }, + "./x-color-picker" : { + "import" : "./dist/x-color-picker.jsx", + "types" : "./dist/x-color-picker.d.ts" + }, + "./x-combobox" : { + "import" : "./dist/x-combobox.jsx", + "types" : "./dist/x-combobox.d.ts" + }, + "./x-command-palette" : { + "import" : "./dist/x-command-palette.jsx", + "types" : "./dist/x-command-palette.d.ts" + }, + "./x-confetti" : { + "import" : "./dist/x-confetti.jsx", + "types" : "./dist/x-confetti.d.ts" + }, + "./x-container" : { + "import" : "./dist/x-container.jsx", + "types" : "./dist/x-container.d.ts" + }, + "./x-context-menu" : { + "import" : "./dist/x-context-menu.jsx", + "types" : "./dist/x-context-menu.d.ts" + }, + "./x-copy" : { + "import" : "./dist/x-copy.jsx", + "types" : "./dist/x-copy.d.ts" + }, + "./x-currency-field" : { + "import" : "./dist/x-currency-field.jsx", + "types" : "./dist/x-currency-field.d.ts" + }, + "./x-date-picker" : { + "import" : "./dist/x-date-picker.jsx", + "types" : "./dist/x-date-picker.d.ts" + }, + "./x-divider" : { + "import" : "./dist/x-divider.jsx", + "types" : "./dist/x-divider.d.ts" + }, + "./x-drawer" : { + "import" : "./dist/x-drawer.jsx", + "types" : "./dist/x-drawer.d.ts" + }, + "./x-dropdown" : { + "import" : "./dist/x-dropdown.jsx", + "types" : "./dist/x-dropdown.d.ts" + }, + "./x-fieldset" : { + "import" : "./dist/x-fieldset.jsx", + "types" : "./dist/x-fieldset.d.ts" + }, + "./x-file-download" : { + "import" : "./dist/x-file-download.jsx", + "types" : "./dist/x-file-download.d.ts" + }, + "./x-file-upload" : { + "import" : "./dist/x-file-upload.jsx", + "types" : "./dist/x-file-upload.d.ts" + }, + "./x-form" : { + "import" : "./dist/x-form.jsx", + "types" : "./dist/x-form.d.ts" + }, + "./x-form-field" : { + "import" : "./dist/x-form-field.jsx", + "types" : "./dist/x-form-field.d.ts" + }, + "./x-gaussian-blur" : { + "import" : "./dist/x-gaussian-blur.jsx", + "types" : "./dist/x-gaussian-blur.d.ts" + }, + "./x-grid" : { + "import" : "./dist/x-grid.jsx", + "types" : "./dist/x-grid.d.ts" + }, + "./x-i18n" : { + "import" : "./dist/x-i18n.jsx", + "types" : "./dist/x-i18n.d.ts" + }, + "./x-i18n-provider" : { + "import" : "./dist/x-i18n-provider.jsx", + "types" : "./dist/x-i18n-provider.d.ts" + }, + "./x-icon" : { + "import" : "./dist/x-icon.jsx", + "types" : "./dist/x-icon.d.ts" + }, + "./x-image" : { + "import" : "./dist/x-image.jsx", + "types" : "./dist/x-image.d.ts" + }, + "./x-kbd" : { + "import" : "./dist/x-kbd.jsx", + "types" : "./dist/x-kbd.d.ts" + }, + "./x-kinetic-canvas" : { + "import" : "./dist/x-kinetic-canvas.jsx", + "types" : "./dist/x-kinetic-canvas.d.ts" + }, + "./x-kinetic-font" : { + "import" : "./dist/x-kinetic-font.jsx", + "types" : "./dist/x-kinetic-font.d.ts" + }, + "./x-kinetic-typography" : { + "import" : "./dist/x-kinetic-typography.jsx", + "types" : "./dist/x-kinetic-typography.d.ts" + }, + "./x-liquid-dock" : { + "import" : "./dist/x-liquid-dock.jsx", + "types" : "./dist/x-liquid-dock.d.ts" + }, + "./x-liquid-fill" : { + "import" : "./dist/x-liquid-fill.jsx", + "types" : "./dist/x-liquid-fill.d.ts" + }, + "./x-liquid-glass" : { + "import" : "./dist/x-liquid-glass.jsx", + "types" : "./dist/x-liquid-glass.d.ts" + }, + "./x-menu" : { + "import" : "./dist/x-menu.jsx", + "types" : "./dist/x-menu.d.ts" + }, + "./x-menu-item" : { + "import" : "./dist/x-menu-item.jsx", + "types" : "./dist/x-menu-item.d.ts" + }, + "./x-metaball-cursor" : { + "import" : "./dist/x-metaball-cursor.jsx", + "types" : "./dist/x-metaball-cursor.d.ts" + }, + "./x-modal" : { + "import" : "./dist/x-modal.jsx", + "types" : "./dist/x-modal.d.ts" + }, + "./x-morph-stack" : { + "import" : "./dist/x-morph-stack.jsx", + "types" : "./dist/x-morph-stack.d.ts" + }, + "./x-multi-combobox" : { + "import" : "./dist/x-multi-combobox.jsx", + "types" : "./dist/x-multi-combobox.d.ts" + }, + "./x-navbar" : { + "import" : "./dist/x-navbar.jsx", + "types" : "./dist/x-navbar.d.ts" + }, + "./x-neural-glow" : { + "import" : "./dist/x-neural-glow.jsx", + "types" : "./dist/x-neural-glow.d.ts" + }, + "./x-notification-center" : { + "import" : "./dist/x-notification-center.jsx", + "types" : "./dist/x-notification-center.d.ts" + }, + "./x-organic-divider" : { + "import" : "./dist/x-organic-divider.jsx", + "types" : "./dist/x-organic-divider.d.ts" + }, + "./x-organic-progress" : { + "import" : "./dist/x-organic-progress.jsx", + "types" : "./dist/x-organic-progress.d.ts" + }, + "./x-organic-shape" : { + "import" : "./dist/x-organic-shape.jsx", + "types" : "./dist/x-organic-shape.d.ts" + }, + "./x-otp-input" : { + "import" : "./dist/x-otp-input.jsx", + "types" : "./dist/x-otp-input.d.ts" + }, + "./x-pagination" : { + "import" : "./dist/x-pagination.jsx", + "types" : "./dist/x-pagination.d.ts" + }, + "./x-particle-button" : { + "import" : "./dist/x-particle-button.jsx", + "types" : "./dist/x-particle-button.d.ts" + }, + "./x-popover" : { + "import" : "./dist/x-popover.jsx", + "types" : "./dist/x-popover.d.ts" + }, + "./x-progress" : { + "import" : "./dist/x-progress.jsx", + "types" : "./dist/x-progress.d.ts" + }, + "./x-progress-circle" : { + "import" : "./dist/x-progress-circle.jsx", + "types" : "./dist/x-progress-circle.d.ts" + }, + "./x-proximity-list" : { + "import" : "./dist/x-proximity-list.jsx", + "types" : "./dist/x-proximity-list.d.ts" + }, + "./x-radio" : { + "import" : "./dist/x-radio.jsx", + "types" : "./dist/x-radio.d.ts" + }, + "./x-range-slider" : { + "import" : "./dist/x-range-slider.jsx", + "types" : "./dist/x-range-slider.d.ts" + }, + "./x-rating" : { + "import" : "./dist/x-rating.jsx", + "types" : "./dist/x-rating.d.ts" + }, + "./x-ripple-effect" : { + "import" : "./dist/x-ripple-effect.jsx", + "types" : "./dist/x-ripple-effect.d.ts" + }, + "./x-scroll" : { + "import" : "./dist/x-scroll.jsx", + "types" : "./dist/x-scroll.d.ts" + }, + "./x-scroll-parallax" : { + "import" : "./dist/x-scroll-parallax.jsx", + "types" : "./dist/x-scroll-parallax.d.ts" + }, + "./x-scroll-stack" : { + "import" : "./dist/x-scroll-stack.jsx", + "types" : "./dist/x-scroll-stack.d.ts" + }, + "./x-scroll-story" : { + "import" : "./dist/x-scroll-story.jsx", + "types" : "./dist/x-scroll-story.d.ts" + }, + "./x-scroll-timeline" : { + "import" : "./dist/x-scroll-timeline.jsx", + "types" : "./dist/x-scroll-timeline.d.ts" + }, + "./x-search-field" : { + "import" : "./dist/x-search-field.jsx", + "types" : "./dist/x-search-field.d.ts" + }, + "./x-select" : { + "import" : "./dist/x-select.jsx", + "types" : "./dist/x-select.d.ts" + }, + "./x-sidebar" : { + "import" : "./dist/x-sidebar.jsx", + "types" : "./dist/x-sidebar.d.ts" + }, + "./x-skeleton" : { + "import" : "./dist/x-skeleton.jsx", + "types" : "./dist/x-skeleton.d.ts" + }, + "./x-skeleton-group" : { + "import" : "./dist/x-skeleton-group.jsx", + "types" : "./dist/x-skeleton-group.d.ts" + }, + "./x-slider" : { + "import" : "./dist/x-slider.jsx", + "types" : "./dist/x-slider.d.ts" + }, + "./x-soft-body" : { + "import" : "./dist/x-soft-body.jsx", + "types" : "./dist/x-soft-body.d.ts" + }, + "./x-spacer" : { + "import" : "./dist/x-spacer.jsx", + "types" : "./dist/x-spacer.d.ts" + }, + "./x-spinner" : { + "import" : "./dist/x-spinner.jsx", + "types" : "./dist/x-spinner.d.ts" + }, + "./x-splash" : { + "import" : "./dist/x-splash.jsx", + "types" : "./dist/x-splash.d.ts" + }, + "./x-split-pane" : { + "import" : "./dist/x-split-pane.jsx", + "types" : "./dist/x-split-pane.d.ts" + }, + "./x-spotlight-card" : { + "import" : "./dist/x-spotlight-card.jsx", + "types" : "./dist/x-spotlight-card.d.ts" + }, + "./x-stat" : { + "import" : "./dist/x-stat.jsx", + "types" : "./dist/x-stat.d.ts" + }, + "./x-stepper" : { + "import" : "./dist/x-stepper.jsx", + "types" : "./dist/x-stepper.d.ts" + }, + "./x-switch" : { + "import" : "./dist/x-switch.jsx", + "types" : "./dist/x-switch.d.ts" + }, + "./x-tab" : { + "import" : "./dist/x-tab.jsx", + "types" : "./dist/x-tab.d.ts" + }, + "./x-table" : { + "import" : "./dist/x-table.jsx", + "types" : "./dist/x-table.d.ts" + }, + "./x-table-cell" : { + "import" : "./dist/x-table-cell.jsx", + "types" : "./dist/x-table-cell.d.ts" + }, + "./x-table-row" : { + "import" : "./dist/x-table-row.jsx", + "types" : "./dist/x-table-row.d.ts" + }, + "./x-tabs" : { + "import" : "./dist/x-tabs.jsx", + "types" : "./dist/x-tabs.d.ts" + }, + "./x-text-area" : { + "import" : "./dist/x-text-area.jsx", + "types" : "./dist/x-text-area.d.ts" + }, + "./x-theme" : { + "import" : "./dist/x-theme.jsx", + "types" : "./dist/x-theme.d.ts" + }, + "./x-timeline" : { + "import" : "./dist/x-timeline.jsx", + "types" : "./dist/x-timeline.d.ts" + }, + "./x-timeline-item" : { + "import" : "./dist/x-timeline-item.jsx", + "types" : "./dist/x-timeline-item.d.ts" + }, + "./x-toast" : { + "import" : "./dist/x-toast.jsx", + "types" : "./dist/x-toast.d.ts" + }, + "./x-toaster" : { + "import" : "./dist/x-toaster.jsx", + "types" : "./dist/x-toaster.d.ts" + }, + "./x-tooltip" : { + "import" : "./dist/x-tooltip.jsx", + "types" : "./dist/x-tooltip.d.ts" + }, + "./x-typography" : { + "import" : "./dist/x-typography.jsx", + "types" : "./dist/x-typography.d.ts" + }, + "./x-welcome-tour" : { + "import" : "./dist/x-welcome-tour.jsx", + "types" : "./dist/x-welcome-tour.d.ts" + } + }, + "devDependencies" : { + "@vanelsas/baredom" : "file:../../", + "solid-js" : "^1.9.0", + "typescript" : "^5.7.0" + }, + "files" : [ "dist", "README.md", "LICENSE" ], + "version" : "0.1.0", + "main" : "./dist/index.js", + "sideEffects" : true +} \ No newline at end of file diff --git a/adapters/solid/src/composables/index.ts b/adapters/solid/src/composables/index.ts new file mode 100644 index 0000000..bdc00b6 --- /dev/null +++ b/adapters/solid/src/composables/index.ts @@ -0,0 +1 @@ +export { useRegisterPreset, type PresetData, type TokenMap } from "./useRegisterPreset"; diff --git a/adapters/solid/src/composables/useRegisterPreset.ts b/adapters/solid/src/composables/useRegisterPreset.ts new file mode 100644 index 0000000..46220f4 --- /dev/null +++ b/adapters/solid/src/composables/useRegisterPreset.ts @@ -0,0 +1,52 @@ +import { registerPreset } from "@vanelsas/baredom/x-theme"; + +/** + * Token map: CSS custom property names to CSS values. + * e.g. `{ "--x-color-primary": "#3b82f6" }` + */ +export type TokenMap = Record; + +/** + * Preset data with light and optional dark mode tokens. + * Tokens not specified fall back to the `default` BareDOM preset. + */ +export interface PresetData { + light: TokenMap; + dark?: TokenMap; +} + +/** + * Register a custom BareDOM theme preset. The preset becomes available + * to any `` in the tree. + * + * Runs synchronously when called. To re-register reactively in response + * to a signal change, call inside a `createEffect`: + * + * ```ts + * createEffect(() => useRegisterPreset(presetName(), tokens())); + * ``` + * + * Partial presets are supported — any tokens you omit automatically + * fall back to the default preset. + * + * @example + * ```ts + * import { useRegisterPreset } from "@vanelsas/baredom-solid/composables"; + * import { XTheme } from "@vanelsas/baredom-solid/x-theme"; + * + * const brandTokens = { + * light: { + * "--x-color-primary": "#e11d48", + * "--x-color-primary-hover": "#be123c", + * }, + * dark: { + * "--x-color-primary": "#fb7185", + * }, + * }; + * + * useRegisterPreset("brand", brandTokens); + * ``` + */ +export function useRegisterPreset(name: string, data: PresetData): void { + registerPreset(name, data as any); +} diff --git a/adapters/solid/src/custom-elements.d.ts b/adapters/solid/src/custom-elements.d.ts new file mode 100644 index 0000000..912f6da --- /dev/null +++ b/adapters/solid/src/custom-elements.d.ts @@ -0,0 +1,219 @@ +// custom-elements.d.ts — auto-generated by generate_solid.bb, do not edit +// Registers BareDOM custom element tag names as valid JSX intrinsic elements. + +import "solid-js"; +import type { XAlert } from "@vanelsas/baredom/x-alert"; +import type { XAvatar } from "@vanelsas/baredom/x-avatar"; +import type { XAvatarGroup } from "@vanelsas/baredom/x-avatar-group"; +import type { XBadge } from "@vanelsas/baredom/x-badge"; +import type { XBentoGrid } from "@vanelsas/baredom/x-bento-grid"; +import type { XBentoItem } from "@vanelsas/baredom/x-bento-item"; +import type { XBreadcrumbs } from "@vanelsas/baredom/x-breadcrumbs"; +import type { XButton } from "@vanelsas/baredom/x-button"; +import type { XCalendar } from "@vanelsas/baredom/x-calendar"; +import type { XCancelDialogue } from "@vanelsas/baredom/x-cancel-dialogue"; +import type { XCard } from "@vanelsas/baredom/x-card"; +import type { XCarousel } from "@vanelsas/baredom/x-carousel"; +import type { XChart } from "@vanelsas/baredom/x-chart"; +import type { XCheckbox } from "@vanelsas/baredom/x-checkbox"; +import type { XChip } from "@vanelsas/baredom/x-chip"; +import type { XCode } from "@vanelsas/baredom/x-code"; +import type { XCollapse } from "@vanelsas/baredom/x-collapse"; +import type { XColorPicker } from "@vanelsas/baredom/x-color-picker"; +import type { XCombobox } from "@vanelsas/baredom/x-combobox"; +import type { XCommandPalette } from "@vanelsas/baredom/x-command-palette"; +import type { XConfetti } from "@vanelsas/baredom/x-confetti"; +import type { XContainer } from "@vanelsas/baredom/x-container"; +import type { XContextMenu } from "@vanelsas/baredom/x-context-menu"; +import type { XCopy } from "@vanelsas/baredom/x-copy"; +import type { XCurrencyField } from "@vanelsas/baredom/x-currency-field"; +import type { XDatePicker } from "@vanelsas/baredom/x-date-picker"; +import type { XDivider } from "@vanelsas/baredom/x-divider"; +import type { XDrawer } from "@vanelsas/baredom/x-drawer"; +import type { XDropdown } from "@vanelsas/baredom/x-dropdown"; +import type { XFieldset } from "@vanelsas/baredom/x-fieldset"; +import type { XFileDownload } from "@vanelsas/baredom/x-file-download"; +import type { XFileUpload } from "@vanelsas/baredom/x-file-upload"; +import type { XForm } from "@vanelsas/baredom/x-form"; +import type { XFormField } from "@vanelsas/baredom/x-form-field"; +import type { XGaussianBlur } from "@vanelsas/baredom/x-gaussian-blur"; +import type { XGrid } from "@vanelsas/baredom/x-grid"; +import type { XI18n } from "@vanelsas/baredom/x-i18n"; +import type { XI18nProvider } from "@vanelsas/baredom/x-i18n-provider"; +import type { XIcon } from "@vanelsas/baredom/x-icon"; +import type { XImage } from "@vanelsas/baredom/x-image"; +import type { XKbd } from "@vanelsas/baredom/x-kbd"; +import type { XKineticCanvas } from "@vanelsas/baredom/x-kinetic-canvas"; +import type { XKineticFont } from "@vanelsas/baredom/x-kinetic-font"; +import type { XKineticTypography } from "@vanelsas/baredom/x-kinetic-typography"; +import type { XLiquidDock } from "@vanelsas/baredom/x-liquid-dock"; +import type { XLiquidFill } from "@vanelsas/baredom/x-liquid-fill"; +import type { XLiquidGlass } from "@vanelsas/baredom/x-liquid-glass"; +import type { XMenu } from "@vanelsas/baredom/x-menu"; +import type { XMenuItem } from "@vanelsas/baredom/x-menu-item"; +import type { XMetaballCursor } from "@vanelsas/baredom/x-metaball-cursor"; +import type { XModal } from "@vanelsas/baredom/x-modal"; +import type { XMorphStack } from "@vanelsas/baredom/x-morph-stack"; +import type { XMultiCombobox } from "@vanelsas/baredom/x-multi-combobox"; +import type { XNavbar } from "@vanelsas/baredom/x-navbar"; +import type { XNeuralGlow } from "@vanelsas/baredom/x-neural-glow"; +import type { XNotificationCenter } from "@vanelsas/baredom/x-notification-center"; +import type { XOrganicDivider } from "@vanelsas/baredom/x-organic-divider"; +import type { XOrganicProgress } from "@vanelsas/baredom/x-organic-progress"; +import type { XOrganicShape } from "@vanelsas/baredom/x-organic-shape"; +import type { XOtpInput } from "@vanelsas/baredom/x-otp-input"; +import type { XPagination } from "@vanelsas/baredom/x-pagination"; +import type { XParticleButton } from "@vanelsas/baredom/x-particle-button"; +import type { XPopover } from "@vanelsas/baredom/x-popover"; +import type { XProgress } from "@vanelsas/baredom/x-progress"; +import type { XProgressCircle } from "@vanelsas/baredom/x-progress-circle"; +import type { XProximityList } from "@vanelsas/baredom/x-proximity-list"; +import type { XRadio } from "@vanelsas/baredom/x-radio"; +import type { XRangeSlider } from "@vanelsas/baredom/x-range-slider"; +import type { XRating } from "@vanelsas/baredom/x-rating"; +import type { XRippleEffect } from "@vanelsas/baredom/x-ripple-effect"; +import type { XScroll } from "@vanelsas/baredom/x-scroll"; +import type { XScrollParallax } from "@vanelsas/baredom/x-scroll-parallax"; +import type { XScrollStack } from "@vanelsas/baredom/x-scroll-stack"; +import type { XScrollStory } from "@vanelsas/baredom/x-scroll-story"; +import type { XScrollTimeline } from "@vanelsas/baredom/x-scroll-timeline"; +import type { XSearchField } from "@vanelsas/baredom/x-search-field"; +import type { XSelect } from "@vanelsas/baredom/x-select"; +import type { XSidebar } from "@vanelsas/baredom/x-sidebar"; +import type { XSkeleton } from "@vanelsas/baredom/x-skeleton"; +import type { XSkeletonGroup } from "@vanelsas/baredom/x-skeleton-group"; +import type { XSlider } from "@vanelsas/baredom/x-slider"; +import type { XSoftBody } from "@vanelsas/baredom/x-soft-body"; +import type { XSpacer } from "@vanelsas/baredom/x-spacer"; +import type { XSpinner } from "@vanelsas/baredom/x-spinner"; +import type { XSplash } from "@vanelsas/baredom/x-splash"; +import type { XSplitPane } from "@vanelsas/baredom/x-split-pane"; +import type { XSpotlightCard } from "@vanelsas/baredom/x-spotlight-card"; +import type { XStat } from "@vanelsas/baredom/x-stat"; +import type { XStepper } from "@vanelsas/baredom/x-stepper"; +import type { XSwitch } from "@vanelsas/baredom/x-switch"; +import type { XTab } from "@vanelsas/baredom/x-tab"; +import type { XTable } from "@vanelsas/baredom/x-table"; +import type { XTableCell } from "@vanelsas/baredom/x-table-cell"; +import type { XTableRow } from "@vanelsas/baredom/x-table-row"; +import type { XTabs } from "@vanelsas/baredom/x-tabs"; +import type { XTextArea } from "@vanelsas/baredom/x-text-area"; +import type { XTheme } from "@vanelsas/baredom/x-theme"; +import type { XTimeline } from "@vanelsas/baredom/x-timeline"; +import type { XTimelineItem } from "@vanelsas/baredom/x-timeline-item"; +import type { XToast } from "@vanelsas/baredom/x-toast"; +import type { XToaster } from "@vanelsas/baredom/x-toaster"; +import type { XTooltip } from "@vanelsas/baredom/x-tooltip"; +import type { XTypography } from "@vanelsas/baredom/x-typography"; +import type { XWelcomeTour } from "@vanelsas/baredom/x-welcome-tour"; + +declare module "solid-js" { + namespace JSX { + interface IntrinsicElements { + "x-alert": JSX.HTMLAttributes & Record; + "x-avatar": JSX.HTMLAttributes & Record; + "x-avatar-group": JSX.HTMLAttributes & Record; + "x-badge": JSX.HTMLAttributes & Record; + "x-bento-grid": JSX.HTMLAttributes & Record; + "x-bento-item": JSX.HTMLAttributes & Record; + "x-breadcrumbs": JSX.HTMLAttributes & Record; + "x-button": JSX.HTMLAttributes & Record; + "x-calendar": JSX.HTMLAttributes & Record; + "x-cancel-dialogue": JSX.HTMLAttributes & Record; + "x-card": JSX.HTMLAttributes & Record; + "x-carousel": JSX.HTMLAttributes & Record; + "x-chart": JSX.HTMLAttributes & Record; + "x-checkbox": JSX.HTMLAttributes & Record; + "x-chip": JSX.HTMLAttributes & Record; + "x-code": JSX.HTMLAttributes & Record; + "x-collapse": JSX.HTMLAttributes & Record; + "x-color-picker": JSX.HTMLAttributes & Record; + "x-combobox": JSX.HTMLAttributes & Record; + "x-command-palette": JSX.HTMLAttributes & Record; + "x-confetti": JSX.HTMLAttributes & Record; + "x-container": JSX.HTMLAttributes & Record; + "x-context-menu": JSX.HTMLAttributes & Record; + "x-copy": JSX.HTMLAttributes & Record; + "x-currency-field": JSX.HTMLAttributes & Record; + "x-date-picker": JSX.HTMLAttributes & Record; + "x-divider": JSX.HTMLAttributes & Record; + "x-drawer": JSX.HTMLAttributes & Record; + "x-dropdown": JSX.HTMLAttributes & Record; + "x-fieldset": JSX.HTMLAttributes & Record; + "x-file-download": JSX.HTMLAttributes & Record; + "x-file-upload": JSX.HTMLAttributes & Record; + "x-form": JSX.HTMLAttributes & Record; + "x-form-field": JSX.HTMLAttributes & Record; + "x-gaussian-blur": JSX.HTMLAttributes & Record; + "x-grid": JSX.HTMLAttributes & Record; + "x-i18n": JSX.HTMLAttributes & Record; + "x-i18n-provider": JSX.HTMLAttributes & Record; + "x-icon": JSX.HTMLAttributes & Record; + "x-image": JSX.HTMLAttributes & Record; + "x-kbd": JSX.HTMLAttributes & Record; + "x-kinetic-canvas": JSX.HTMLAttributes & Record; + "x-kinetic-font": JSX.HTMLAttributes & Record; + "x-kinetic-typography": JSX.HTMLAttributes & Record; + "x-liquid-dock": JSX.HTMLAttributes & Record; + "x-liquid-fill": JSX.HTMLAttributes & Record; + "x-liquid-glass": JSX.HTMLAttributes & Record; + "x-menu": JSX.HTMLAttributes & Record; + "x-menu-item": JSX.HTMLAttributes & Record; + "x-metaball-cursor": JSX.HTMLAttributes & Record; + "x-modal": JSX.HTMLAttributes & Record; + "x-morph-stack": JSX.HTMLAttributes & Record; + "x-multi-combobox": JSX.HTMLAttributes & Record; + "x-navbar": JSX.HTMLAttributes & Record; + "x-neural-glow": JSX.HTMLAttributes & Record; + "x-notification-center": JSX.HTMLAttributes & Record; + "x-organic-divider": JSX.HTMLAttributes & Record; + "x-organic-progress": JSX.HTMLAttributes & Record; + "x-organic-shape": JSX.HTMLAttributes & Record; + "x-otp-input": JSX.HTMLAttributes & Record; + "x-pagination": JSX.HTMLAttributes & Record; + "x-particle-button": JSX.HTMLAttributes & Record; + "x-popover": JSX.HTMLAttributes & Record; + "x-progress": JSX.HTMLAttributes & Record; + "x-progress-circle": JSX.HTMLAttributes & Record; + "x-proximity-list": JSX.HTMLAttributes & Record; + "x-radio": JSX.HTMLAttributes & Record; + "x-range-slider": JSX.HTMLAttributes & Record; + "x-rating": JSX.HTMLAttributes & Record; + "x-ripple-effect": JSX.HTMLAttributes & Record; + "x-scroll": JSX.HTMLAttributes & Record; + "x-scroll-parallax": JSX.HTMLAttributes & Record; + "x-scroll-stack": JSX.HTMLAttributes & Record; + "x-scroll-story": JSX.HTMLAttributes & Record; + "x-scroll-timeline": JSX.HTMLAttributes & Record; + "x-search-field": JSX.HTMLAttributes & Record; + "x-select": JSX.HTMLAttributes & Record; + "x-sidebar": JSX.HTMLAttributes & Record; + "x-skeleton": JSX.HTMLAttributes & Record; + "x-skeleton-group": JSX.HTMLAttributes & Record; + "x-slider": JSX.HTMLAttributes & Record; + "x-soft-body": JSX.HTMLAttributes & Record; + "x-spacer": JSX.HTMLAttributes & Record; + "x-spinner": JSX.HTMLAttributes & Record; + "x-splash": JSX.HTMLAttributes & Record; + "x-split-pane": JSX.HTMLAttributes & Record; + "x-spotlight-card": JSX.HTMLAttributes & Record; + "x-stat": JSX.HTMLAttributes & Record; + "x-stepper": JSX.HTMLAttributes & Record; + "x-switch": JSX.HTMLAttributes & Record; + "x-tab": JSX.HTMLAttributes & Record; + "x-table": JSX.HTMLAttributes & Record; + "x-table-cell": JSX.HTMLAttributes & Record; + "x-table-row": JSX.HTMLAttributes & Record; + "x-tabs": JSX.HTMLAttributes & Record; + "x-text-area": JSX.HTMLAttributes & Record; + "x-theme": JSX.HTMLAttributes & Record; + "x-timeline": JSX.HTMLAttributes & Record; + "x-timeline-item": JSX.HTMLAttributes & Record; + "x-toast": JSX.HTMLAttributes & Record; + "x-toaster": JSX.HTMLAttributes & Record; + "x-tooltip": JSX.HTMLAttributes & Record; + "x-typography": JSX.HTMLAttributes & Record; + "x-welcome-tour": JSX.HTMLAttributes & Record; + } + } +} diff --git a/adapters/solid/src/index.ts b/adapters/solid/src/index.ts new file mode 100644 index 0000000..886204e --- /dev/null +++ b/adapters/solid/src/index.ts @@ -0,0 +1,109 @@ +// index.ts — auto-generated by generate_solid.bb, do not edit + +export { XAlert, type XAlertProps } from "./x-alert"; +export { XAvatar, type XAvatarProps } from "./x-avatar"; +export { XAvatarGroup, type XAvatarGroupProps } from "./x-avatar-group"; +export { XBadge, type XBadgeProps } from "./x-badge"; +export { XBentoGrid, type XBentoGridProps } from "./x-bento-grid"; +export { XBentoItem, type XBentoItemProps } from "./x-bento-item"; +export { XBreadcrumbs, type XBreadcrumbsProps } from "./x-breadcrumbs"; +export { XButton, type XButtonProps } from "./x-button"; +export { XCalendar, type XCalendarProps } from "./x-calendar"; +export { XCancelDialogue, type XCancelDialogueProps } from "./x-cancel-dialogue"; +export { XCard, type XCardProps } from "./x-card"; +export { XCarousel, type XCarouselProps } from "./x-carousel"; +export { XChart, type XChartProps } from "./x-chart"; +export { XCheckbox, type XCheckboxProps } from "./x-checkbox"; +export { XChip, type XChipProps } from "./x-chip"; +export { XCode, type XCodeProps } from "./x-code"; +export { XCollapse, type XCollapseProps } from "./x-collapse"; +export { XColorPicker, type XColorPickerProps } from "./x-color-picker"; +export { XCombobox, type XComboboxProps } from "./x-combobox"; +export { XCommandPalette, type XCommandPaletteProps } from "./x-command-palette"; +export { XConfetti, type XConfettiProps } from "./x-confetti"; +export { XContainer, type XContainerProps } from "./x-container"; +export { XContextMenu, type XContextMenuProps } from "./x-context-menu"; +export { XCopy, type XCopyProps } from "./x-copy"; +export { XCurrencyField, type XCurrencyFieldProps } from "./x-currency-field"; +export { XDatePicker, type XDatePickerProps } from "./x-date-picker"; +export { XDivider, type XDividerProps } from "./x-divider"; +export { XDrawer, type XDrawerProps } from "./x-drawer"; +export { XDropdown, type XDropdownProps } from "./x-dropdown"; +export { XFieldset, type XFieldsetProps } from "./x-fieldset"; +export { XFileDownload, type XFileDownloadProps } from "./x-file-download"; +export { XFileUpload, type XFileUploadProps } from "./x-file-upload"; +export { XForm, type XFormProps } from "./x-form"; +export { XFormField, type XFormFieldProps } from "./x-form-field"; +export { XGaussianBlur, type XGaussianBlurProps } from "./x-gaussian-blur"; +export { XGrid, type XGridProps } from "./x-grid"; +export { XI18n, type XI18nProps } from "./x-i18n"; +export { XI18nProvider, type XI18nProviderProps } from "./x-i18n-provider"; +export { XIcon, type XIconProps } from "./x-icon"; +export { XImage, type XImageProps } from "./x-image"; +export { XKbd, type XKbdProps } from "./x-kbd"; +export { XKineticCanvas, type XKineticCanvasProps } from "./x-kinetic-canvas"; +export { XKineticFont, type XKineticFontProps } from "./x-kinetic-font"; +export { XKineticTypography, type XKineticTypographyProps } from "./x-kinetic-typography"; +export { XLiquidDock, type XLiquidDockProps } from "./x-liquid-dock"; +export { XLiquidFill, type XLiquidFillProps } from "./x-liquid-fill"; +export { XLiquidGlass, type XLiquidGlassProps } from "./x-liquid-glass"; +export { XMenu, type XMenuProps } from "./x-menu"; +export { XMenuItem, type XMenuItemProps } from "./x-menu-item"; +export { XMetaballCursor, type XMetaballCursorProps } from "./x-metaball-cursor"; +export { XModal, type XModalProps } from "./x-modal"; +export { XMorphStack, type XMorphStackProps } from "./x-morph-stack"; +export { XMultiCombobox, type XMultiComboboxProps } from "./x-multi-combobox"; +export { XNavbar, type XNavbarProps } from "./x-navbar"; +export { XNeuralGlow, type XNeuralGlowProps } from "./x-neural-glow"; +export { XNotificationCenter, type XNotificationCenterProps } from "./x-notification-center"; +export { XOrganicDivider, type XOrganicDividerProps } from "./x-organic-divider"; +export { XOrganicProgress, type XOrganicProgressProps } from "./x-organic-progress"; +export { XOrganicShape, type XOrganicShapeProps } from "./x-organic-shape"; +export { XOtpInput, type XOtpInputProps } from "./x-otp-input"; +export { XPagination, type XPaginationProps } from "./x-pagination"; +export { XParticleButton, type XParticleButtonProps } from "./x-particle-button"; +export { XPopover, type XPopoverProps } from "./x-popover"; +export { XProgress, type XProgressProps } from "./x-progress"; +export { XProgressCircle, type XProgressCircleProps } from "./x-progress-circle"; +export { XProximityList, type XProximityListProps } from "./x-proximity-list"; +export { XRadio, type XRadioProps } from "./x-radio"; +export { XRangeSlider, type XRangeSliderProps } from "./x-range-slider"; +export { XRating, type XRatingProps } from "./x-rating"; +export { XRippleEffect, type XRippleEffectProps } from "./x-ripple-effect"; +export { XScroll, type XScrollProps } from "./x-scroll"; +export { XScrollParallax, type XScrollParallaxProps } from "./x-scroll-parallax"; +export { XScrollStack, type XScrollStackProps } from "./x-scroll-stack"; +export { XScrollStory, type XScrollStoryProps } from "./x-scroll-story"; +export { XScrollTimeline, type XScrollTimelineProps } from "./x-scroll-timeline"; +export { XSearchField, type XSearchFieldProps } from "./x-search-field"; +export { XSelect, type XSelectProps } from "./x-select"; +export { XSidebar, type XSidebarProps } from "./x-sidebar"; +export { XSkeleton, type XSkeletonProps } from "./x-skeleton"; +export { XSkeletonGroup, type XSkeletonGroupProps } from "./x-skeleton-group"; +export { XSlider, type XSliderProps } from "./x-slider"; +export { XSoftBody, type XSoftBodyProps } from "./x-soft-body"; +export { XSpacer, type XSpacerProps } from "./x-spacer"; +export { XSpinner, type XSpinnerProps } from "./x-spinner"; +export { XSplash, type XSplashProps } from "./x-splash"; +export { XSplitPane, type XSplitPaneProps } from "./x-split-pane"; +export { XSpotlightCard, type XSpotlightCardProps } from "./x-spotlight-card"; +export { XStat, type XStatProps } from "./x-stat"; +export { XStepper, type XStepperProps } from "./x-stepper"; +export { XSwitch, type XSwitchProps } from "./x-switch"; +export { XTab, type XTabProps } from "./x-tab"; +export { XTable, type XTableProps } from "./x-table"; +export { XTableCell, type XTableCellProps } from "./x-table-cell"; +export { XTableRow, type XTableRowProps } from "./x-table-row"; +export { XTabs, type XTabsProps } from "./x-tabs"; +export { XTextArea, type XTextAreaProps } from "./x-text-area"; +export { XTheme, type XThemeProps } from "./x-theme"; +export { XTimeline, type XTimelineProps } from "./x-timeline"; +export { XTimelineItem, type XTimelineItemProps } from "./x-timeline-item"; +export { XToast, type XToastProps } from "./x-toast"; +export { XToaster, type XToasterProps } from "./x-toaster"; +export { XTooltip, type XTooltipProps } from "./x-tooltip"; +export { XTypography, type XTypographyProps } from "./x-typography"; +export { XWelcomeTour, type XWelcomeTourProps } from "./x-welcome-tour"; + +// Composables (hand-written) +export { useRegisterPreset, type PresetData, type TokenMap } from "./composables"; diff --git a/adapters/solid/src/x-alert.tsx b/adapters/solid/src/x-alert.tsx new file mode 100644 index 0000000..2005618 --- /dev/null +++ b/adapters/solid/src/x-alert.tsx @@ -0,0 +1,48 @@ +// x-alert.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XAlert as XAlertElement } from "@vanelsas/baredom/x-alert"; +import { init } from "@vanelsas/baredom/x-alert"; + +init(); + +export interface XAlertProps { + type?: string; + text?: string; + icon?: string; + dismissible?: boolean; + disabled?: boolean; + timeoutMs?: number; + onDismiss?: (e: CustomEvent<{ type: string; reason: string; text: string }>) => void; + ref?: XAlertElement | ((el: XAlertElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XAlert(props: XAlertProps): JSX.Element { + const [local, others] = splitProps(props, ["onDismiss", "ref", "children"]); + let el!: XAlertElement; + + const setRef = (r: XAlertElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onDismiss?.(e as CustomEvent<{ type: string; reason: string; text: string }>); + el.addEventListener("x-alert-dismiss", handler); + onCleanup(() => el.removeEventListener("x-alert-dismiss", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-avatar-group.tsx b/adapters/solid/src/x-avatar-group.tsx new file mode 100644 index 0000000..1137d1e --- /dev/null +++ b/adapters/solid/src/x-avatar-group.tsx @@ -0,0 +1,38 @@ +// x-avatar-group.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XAvatarGroup as XAvatarGroupElement } from "@vanelsas/baredom/x-avatar-group"; +import { init } from "@vanelsas/baredom/x-avatar-group"; + +init(); + +export interface XAvatarGroupProps { + size?: string; + overlap?: string; + max?: number; + direction?: string; + disabled?: boolean; + label?: string; + ref?: XAvatarGroupElement | ((el: XAvatarGroupElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XAvatarGroup(props: XAvatarGroupProps): JSX.Element { + const [local, others] = splitProps(props, ["ref", "children"]); + let el!: XAvatarGroupElement; + + const setRef = (r: XAvatarGroupElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-avatar.tsx b/adapters/solid/src/x-avatar.tsx new file mode 100644 index 0000000..cc2aed2 --- /dev/null +++ b/adapters/solid/src/x-avatar.tsx @@ -0,0 +1,41 @@ +// x-avatar.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XAvatar as XAvatarElement } from "@vanelsas/baredom/x-avatar"; +import { init } from "@vanelsas/baredom/x-avatar"; + +init(); + +export interface XAvatarProps { + initials?: string; + disabled?: boolean; + variant?: string; + alt?: string; + name?: string; + src?: string; + size?: string; + status?: string; + shape?: string; + ref?: XAvatarElement | ((el: XAvatarElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XAvatar(props: XAvatarProps): JSX.Element { + const [local, others] = splitProps(props, ["ref", "children"]); + let el!: XAvatarElement; + + const setRef = (r: XAvatarElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-badge.tsx b/adapters/solid/src/x-badge.tsx new file mode 100644 index 0000000..b397ba7 --- /dev/null +++ b/adapters/solid/src/x-badge.tsx @@ -0,0 +1,39 @@ +// x-badge.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XBadge as XBadgeElement } from "@vanelsas/baredom/x-badge"; +import { init } from "@vanelsas/baredom/x-badge"; + +init(); + +export interface XBadgeProps { + variant?: string; + size?: string; + pill?: boolean; + dot?: boolean; + count?: number; + max?: number; + text?: string; + ref?: XBadgeElement | ((el: XBadgeElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XBadge(props: XBadgeProps): JSX.Element { + const [local, others] = splitProps(props, ["ref", "children"]); + let el!: XBadgeElement; + + const setRef = (r: XBadgeElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-bento-grid.tsx b/adapters/solid/src/x-bento-grid.tsx new file mode 100644 index 0000000..ec757db --- /dev/null +++ b/adapters/solid/src/x-bento-grid.tsx @@ -0,0 +1,32 @@ +// x-bento-grid.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XBentoGrid as XBentoGridElement } from "@vanelsas/baredom/x-bento-grid"; +import { init } from "@vanelsas/baredom/x-bento-grid"; + +init(); + +export interface XBentoGridProps { + ref?: XBentoGridElement | ((el: XBentoGridElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XBentoGrid(props: XBentoGridProps): JSX.Element { + const [local, others] = splitProps(props, ["ref", "children"]); + let el!: XBentoGridElement; + + const setRef = (r: XBentoGridElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-bento-item.tsx b/adapters/solid/src/x-bento-item.tsx new file mode 100644 index 0000000..4b397ba --- /dev/null +++ b/adapters/solid/src/x-bento-item.tsx @@ -0,0 +1,32 @@ +// x-bento-item.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XBentoItem as XBentoItemElement } from "@vanelsas/baredom/x-bento-item"; +import { init } from "@vanelsas/baredom/x-bento-item"; + +init(); + +export interface XBentoItemProps { + ref?: XBentoItemElement | ((el: XBentoItemElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XBentoItem(props: XBentoItemProps): JSX.Element { + const [local, others] = splitProps(props, ["ref", "children"]); + let el!: XBentoItemElement; + + const setRef = (r: XBentoItemElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-breadcrumbs.tsx b/adapters/solid/src/x-breadcrumbs.tsx new file mode 100644 index 0000000..37f1031 --- /dev/null +++ b/adapters/solid/src/x-breadcrumbs.tsx @@ -0,0 +1,40 @@ +// x-breadcrumbs.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XBreadcrumbs as XBreadcrumbsElement } from "@vanelsas/baredom/x-breadcrumbs"; +import { init } from "@vanelsas/baredom/x-breadcrumbs"; + +init(); + +export interface XBreadcrumbsProps { + separator?: string; + size?: string; + variant?: string; + wrap?: boolean; + maxItems?: number; + itemsBefore?: number; + itemsAfter?: number; + disabled?: boolean; + ref?: XBreadcrumbsElement | ((el: XBreadcrumbsElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XBreadcrumbs(props: XBreadcrumbsProps): JSX.Element { + const [local, others] = splitProps(props, ["ref", "children"]); + let el!: XBreadcrumbsElement; + + const setRef = (r: XBreadcrumbsElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-button.tsx b/adapters/solid/src/x-button.tsx new file mode 100644 index 0000000..a82350d --- /dev/null +++ b/adapters/solid/src/x-button.tsx @@ -0,0 +1,75 @@ +// x-button.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XButton as XButtonElement } from "@vanelsas/baredom/x-button"; +import { init } from "@vanelsas/baredom/x-button"; + +init(); + +export interface XButtonProps { + disabled?: boolean; + loading?: boolean; + pressed?: boolean; + onPress?: (e: CustomEvent<{ source: string }>) => void; + onPressStart?: (e: CustomEvent<{ source: string }>) => void; + onPressEnd?: (e: CustomEvent<{ source: string }>) => void; + onHoverStart?: (e: CustomEvent<{}>) => void; + onHoverEnd?: (e: CustomEvent<{}>) => void; + onFocusVisible?: (e: CustomEvent<{}>) => void; + ref?: XButtonElement | ((el: XButtonElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XButton(props: XButtonProps): JSX.Element { + const [local, others] = splitProps(props, ["onPress", "onPressStart", "onPressEnd", "onHoverStart", "onHoverEnd", "onFocusVisible", "ref", "children"]); + let el!: XButtonElement; + + const setRef = (r: XButtonElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onPress?.(e as CustomEvent<{ source: string }>); + el.addEventListener("press", handler); + onCleanup(() => el.removeEventListener("press", handler)); + } + { + const handler = (e: Event) => local.onPressStart?.(e as CustomEvent<{ source: string }>); + el.addEventListener("press-start", handler); + onCleanup(() => el.removeEventListener("press-start", handler)); + } + { + const handler = (e: Event) => local.onPressEnd?.(e as CustomEvent<{ source: string }>); + el.addEventListener("press-end", handler); + onCleanup(() => el.removeEventListener("press-end", handler)); + } + { + const handler = (e: Event) => local.onHoverStart?.(e as CustomEvent<{}>); + el.addEventListener("hover-start", handler); + onCleanup(() => el.removeEventListener("hover-start", handler)); + } + { + const handler = (e: Event) => local.onHoverEnd?.(e as CustomEvent<{}>); + el.addEventListener("hover-end", handler); + onCleanup(() => el.removeEventListener("hover-end", handler)); + } + { + const handler = (e: Event) => local.onFocusVisible?.(e as CustomEvent<{}>); + el.addEventListener("focus-visible", handler); + onCleanup(() => el.removeEventListener("focus-visible", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-calendar.tsx b/adapters/solid/src/x-calendar.tsx new file mode 100644 index 0000000..6ba83cc --- /dev/null +++ b/adapters/solid/src/x-calendar.tsx @@ -0,0 +1,62 @@ +// x-calendar.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XCalendar as XCalendarElement } from "@vanelsas/baredom/x-calendar"; +import { init } from "@vanelsas/baredom/x-calendar"; + +init(); + +export interface XCalendarProps { + min?: string; + disabled?: boolean; + locale?: string; + autoSwap?: boolean; + value?: string; + mode?: string; + start?: string; + month?: string; + showWeekNumbers?: boolean; + disabledDates?: string; + max?: string; + firstDayOfWeek?: string; + end?: string; + rangeAllowSameDay?: boolean; + onChange?: (e: CustomEvent<{ value: string; start: string; end: string; mode: string }>) => void; + onNavigate?: (e: CustomEvent<{ month: string }>) => void; + ref?: XCalendarElement | ((el: XCalendarElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XCalendar(props: XCalendarProps): JSX.Element { + const [local, others] = splitProps(props, ["onChange", "onNavigate", "ref", "children"]); + let el!: XCalendarElement; + + const setRef = (r: XCalendarElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onChange?.(e as CustomEvent<{ value: string; start: string; end: string; mode: string }>); + el.addEventListener("x-calendar-change", handler); + onCleanup(() => el.removeEventListener("x-calendar-change", handler)); + } + { + const handler = (e: Event) => local.onNavigate?.(e as CustomEvent<{ month: string }>); + el.addEventListener("x-calendar-navigate", handler); + onCleanup(() => el.removeEventListener("x-calendar-navigate", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-cancel-dialogue.tsx b/adapters/solid/src/x-cancel-dialogue.tsx new file mode 100644 index 0000000..f3519a8 --- /dev/null +++ b/adapters/solid/src/x-cancel-dialogue.tsx @@ -0,0 +1,67 @@ +// x-cancel-dialogue.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XCancelDialogue as XCancelDialogueElement } from "@vanelsas/baredom/x-cancel-dialogue"; +import { init } from "@vanelsas/baredom/x-cancel-dialogue"; + +init(); + +export interface XCancelDialogueProps { + open?: boolean; + disabled?: boolean; + headline?: string; + message?: string; + confirmText?: string; + cancelText?: string; + danger?: boolean; + onCancelRequest?: (e: CustomEvent<{ reason: string }>) => void; + onCancel?: (e: CustomEvent<{}>) => void; + onConfirmRequest?: (e: CustomEvent<{}>) => void; + onConfirm?: (e: CustomEvent<{}>) => void; + ref?: XCancelDialogueElement | ((el: XCancelDialogueElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XCancelDialogue(props: XCancelDialogueProps): JSX.Element { + const [local, others] = splitProps(props, ["onCancelRequest", "onCancel", "onConfirmRequest", "onConfirm", "ref", "children"]); + let el!: XCancelDialogueElement; + + const setRef = (r: XCancelDialogueElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onCancelRequest?.(e as CustomEvent<{ reason: string }>); + el.addEventListener("x-cancel-dialogue-cancel-request", handler); + onCleanup(() => el.removeEventListener("x-cancel-dialogue-cancel-request", handler)); + } + { + const handler = (e: Event) => local.onCancel?.(e as CustomEvent<{}>); + el.addEventListener("x-cancel-dialogue-cancel", handler); + onCleanup(() => el.removeEventListener("x-cancel-dialogue-cancel", handler)); + } + { + const handler = (e: Event) => local.onConfirmRequest?.(e as CustomEvent<{}>); + el.addEventListener("x-cancel-dialogue-confirm-request", handler); + onCleanup(() => el.removeEventListener("x-cancel-dialogue-confirm-request", handler)); + } + { + const handler = (e: Event) => local.onConfirm?.(e as CustomEvent<{}>); + el.addEventListener("x-cancel-dialogue-confirm", handler); + onCleanup(() => el.removeEventListener("x-cancel-dialogue-confirm", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-card.tsx b/adapters/solid/src/x-card.tsx new file mode 100644 index 0000000..0c8723b --- /dev/null +++ b/adapters/solid/src/x-card.tsx @@ -0,0 +1,44 @@ +// x-card.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XCard as XCardElement } from "@vanelsas/baredom/x-card"; +import { init } from "@vanelsas/baredom/x-card"; + +init(); + +export interface XCardProps { + interactive?: boolean; + disabled?: boolean; + onPress?: (e: CustomEvent<{}>) => void; + ref?: XCardElement | ((el: XCardElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XCard(props: XCardProps): JSX.Element { + const [local, others] = splitProps(props, ["onPress", "ref", "children"]); + let el!: XCardElement; + + const setRef = (r: XCardElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onPress?.(e as CustomEvent<{}>); + el.addEventListener("press", handler); + onCleanup(() => el.removeEventListener("press", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-carousel.tsx b/adapters/solid/src/x-carousel.tsx new file mode 100644 index 0000000..5dc4139 --- /dev/null +++ b/adapters/solid/src/x-carousel.tsx @@ -0,0 +1,52 @@ +// x-carousel.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XCarousel as XCarouselElement } from "@vanelsas/baredom/x-carousel"; +import { init } from "@vanelsas/baredom/x-carousel"; + +init(); + +export interface XCarouselProps { + arrows?: boolean; + disabled?: boolean; + transition?: string; + loop?: boolean; + interval?: number; + autoplay?: boolean; + peek?: string; + dots?: boolean; + currentSlide?: number; + direction?: string; + onChange?: (e: CustomEvent<{ index: number; previousIndex: number; reason: string }>) => void; + ref?: XCarouselElement | ((el: XCarouselElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XCarousel(props: XCarouselProps): JSX.Element { + const [local, others] = splitProps(props, ["onChange", "ref", "children"]); + let el!: XCarouselElement; + + const setRef = (r: XCarouselElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onChange?.(e as CustomEvent<{ index: number; previousIndex: number; reason: string }>); + el.addEventListener("x-carousel-change", handler); + onCleanup(() => el.removeEventListener("x-carousel-change", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-chart.tsx b/adapters/solid/src/x-chart.tsx new file mode 100644 index 0000000..3ae97f5 --- /dev/null +++ b/adapters/solid/src/x-chart.tsx @@ -0,0 +1,59 @@ +// x-chart.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XChart as XChartElement } from "@vanelsas/baredom/x-chart"; +import { init } from "@vanelsas/baredom/x-chart"; + +init(); + +export interface XChartProps { + selected?: string; + disabled?: boolean; + axes?: boolean; + grid?: boolean; + cursor?: string; + type?: string; + loading?: boolean; + padding?: number; + tooltip?: boolean; + height?: number; + data?: any; + onSelect?: (e: CustomEvent<{ seriesId: string; index: number; x: number; y: number; value: number }>) => void; + onHover?: (e: CustomEvent<{ seriesId: string; index: number; x: number; y: number; value: number }>) => void; + ref?: XChartElement | ((el: XChartElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XChart(props: XChartProps): JSX.Element { + const [local, others] = splitProps(props, ["onSelect", "onHover", "ref", "children"]); + let el!: XChartElement; + + const setRef = (r: XChartElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onSelect?.(e as CustomEvent<{ seriesId: string; index: number; x: number; y: number; value: number }>); + el.addEventListener("x-chart-select", handler); + onCleanup(() => el.removeEventListener("x-chart-select", handler)); + } + { + const handler = (e: Event) => local.onHover?.(e as CustomEvent<{ seriesId: string; index: number; x: number; y: number; value: number }>); + el.addEventListener("x-chart-hover", handler); + onCleanup(() => el.removeEventListener("x-chart-hover", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-checkbox.tsx b/adapters/solid/src/x-checkbox.tsx new file mode 100644 index 0000000..caa193c --- /dev/null +++ b/adapters/solid/src/x-checkbox.tsx @@ -0,0 +1,73 @@ +// x-checkbox.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup, createEffect } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XCheckbox as XCheckboxElement } from "@vanelsas/baredom/x-checkbox"; +import { init } from "@vanelsas/baredom/x-checkbox"; + +init(); + +export interface XCheckboxProps { + checked?: boolean; + indeterminate?: boolean; + disabled?: boolean; + readOnly?: boolean; + required?: boolean; + name?: string; + value?: string; + defaultChecked?: boolean; + onChangeRequest?: (e: CustomEvent<{ value: string; previousChecked: boolean; nextChecked: boolean }>) => void; + onChange?: (e: CustomEvent<{ value: string; checked: boolean }>) => void; + ref?: XCheckboxElement | ((el: XCheckboxElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XCheckbox(props: XCheckboxProps): JSX.Element { + const [local, others] = splitProps(props, ["checked", "defaultChecked", "onChangeRequest", "onChange", "ref", "children"]); + let el!: XCheckboxElement; + + const setRef = (r: XCheckboxElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el || local.checked !== undefined || local.defaultChecked === undefined) return; + if (local.defaultChecked) el.setAttribute("checked", ""); + else el.removeAttribute("checked"); + }); + + createEffect(() => { + if (!el) return; + const v = local.checked; + if (v === undefined) return; + if (v) el.setAttribute("checked", ""); + else el.removeAttribute("checked"); + }); + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => { + if (local.checked !== undefined) e.preventDefault(); + local.onChangeRequest?.(e as CustomEvent<{ value: string; previousChecked: boolean; nextChecked: boolean }>); + }; + el.addEventListener("x-checkbox-change-request", handler); + onCleanup(() => el.removeEventListener("x-checkbox-change-request", handler)); + } + { + const handler = (e: Event) => local.onChange?.(e as CustomEvent<{ value: string; checked: boolean }>); + el.addEventListener("x-checkbox-change", handler); + onCleanup(() => el.removeEventListener("x-checkbox-change", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-chip.tsx b/adapters/solid/src/x-chip.tsx new file mode 100644 index 0000000..ffbeb33 --- /dev/null +++ b/adapters/solid/src/x-chip.tsx @@ -0,0 +1,46 @@ +// x-chip.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XChip as XChipElement } from "@vanelsas/baredom/x-chip"; +import { init } from "@vanelsas/baredom/x-chip"; + +init(); + +export interface XChipProps { + label?: string; + value?: string; + removable?: boolean; + disabled?: boolean; + onRemove?: (e: CustomEvent<{ value: string; label: string }>) => void; + ref?: XChipElement | ((el: XChipElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XChip(props: XChipProps): JSX.Element { + const [local, others] = splitProps(props, ["onRemove", "ref", "children"]); + let el!: XChipElement; + + const setRef = (r: XChipElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onRemove?.(e as CustomEvent<{ value: string; label: string }>); + el.addEventListener("x-chip-remove", handler); + onCleanup(() => el.removeEventListener("x-chip-remove", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-code.tsx b/adapters/solid/src/x-code.tsx new file mode 100644 index 0000000..df38dd1 --- /dev/null +++ b/adapters/solid/src/x-code.tsx @@ -0,0 +1,56 @@ +// x-code.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XCode as XCodeElement } from "@vanelsas/baredom/x-code"; +import { init } from "@vanelsas/baredom/x-code"; + +init(); + +export interface XCodeProps { + language?: string; + filename?: string; + showCopy?: boolean; + lineNumbers?: boolean; + wrap?: boolean; + maxLines?: number; + expanded?: boolean; + code?: string; + onCopy?: (e: CustomEvent<{ code: string }>) => void; + onToggle?: (e: CustomEvent<{ expanded: boolean }>) => void; + ref?: XCodeElement | ((el: XCodeElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XCode(props: XCodeProps): JSX.Element { + const [local, others] = splitProps(props, ["onCopy", "onToggle", "ref", "children"]); + let el!: XCodeElement; + + const setRef = (r: XCodeElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onCopy?.(e as CustomEvent<{ code: string }>); + el.addEventListener("x-code-copy", handler); + onCleanup(() => el.removeEventListener("x-code-copy", handler)); + } + { + const handler = (e: Event) => local.onToggle?.(e as CustomEvent<{ expanded: boolean }>); + el.addEventListener("x-code-toggle", handler); + onCleanup(() => el.removeEventListener("x-code-toggle", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-collapse.tsx b/adapters/solid/src/x-collapse.tsx new file mode 100644 index 0000000..0e3e2a2 --- /dev/null +++ b/adapters/solid/src/x-collapse.tsx @@ -0,0 +1,52 @@ +// x-collapse.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XCollapse as XCollapseElement } from "@vanelsas/baredom/x-collapse"; +import { init } from "@vanelsas/baredom/x-collapse"; + +init(); + +export interface XCollapseProps { + open?: boolean; + disabled?: boolean; + header?: string; + durationMs?: number; + onToggle?: (e: CustomEvent<{ open: boolean; source: string }>) => void; + onChange?: (e: CustomEvent<{ open: boolean }>) => void; + ref?: XCollapseElement | ((el: XCollapseElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XCollapse(props: XCollapseProps): JSX.Element { + const [local, others] = splitProps(props, ["onToggle", "onChange", "ref", "children"]); + let el!: XCollapseElement; + + const setRef = (r: XCollapseElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onToggle?.(e as CustomEvent<{ open: boolean; source: string }>); + el.addEventListener("x-collapse-toggle", handler); + onCleanup(() => el.removeEventListener("x-collapse-toggle", handler)); + } + { + const handler = (e: Event) => local.onChange?.(e as CustomEvent<{ open: boolean }>); + el.addEventListener("x-collapse-change", handler); + onCleanup(() => el.removeEventListener("x-collapse-change", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-color-picker.tsx b/adapters/solid/src/x-color-picker.tsx new file mode 100644 index 0000000..6756fde --- /dev/null +++ b/adapters/solid/src/x-color-picker.tsx @@ -0,0 +1,57 @@ +// x-color-picker.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XColorPicker as XColorPickerElement } from "@vanelsas/baredom/x-color-picker"; +import { init } from "@vanelsas/baredom/x-color-picker"; + +init(); + +export interface XColorPickerProps { + open?: boolean; + disabled?: boolean; + name?: string; + value?: string; + mode?: string; + swatches?: string; + readOnly?: boolean; + label?: string; + alpha?: boolean; + onInput?: (e: CustomEvent<{ value: string; h: number; s: number; l: number; a: number }>) => void; + onChange?: (e: CustomEvent<{ value: string; h: number; s: number; l: number; a: number }>) => void; + ref?: XColorPickerElement | ((el: XColorPickerElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XColorPicker(props: XColorPickerProps): JSX.Element { + const [local, others] = splitProps(props, ["onInput", "onChange", "ref", "children"]); + let el!: XColorPickerElement; + + const setRef = (r: XColorPickerElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onInput?.(e as CustomEvent<{ value: string; h: number; s: number; l: number; a: number }>); + el.addEventListener("x-color-picker-input", handler); + onCleanup(() => el.removeEventListener("x-color-picker-input", handler)); + } + { + const handler = (e: Event) => local.onChange?.(e as CustomEvent<{ value: string; h: number; s: number; l: number; a: number }>); + el.addEventListener("x-color-picker-change", handler); + onCleanup(() => el.removeEventListener("x-color-picker-change", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-combobox.tsx b/adapters/solid/src/x-combobox.tsx new file mode 100644 index 0000000..dd68f93 --- /dev/null +++ b/adapters/solid/src/x-combobox.tsx @@ -0,0 +1,83 @@ +// x-combobox.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup, createEffect } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XCombobox as XComboboxElement } from "@vanelsas/baredom/x-combobox"; +import { init } from "@vanelsas/baredom/x-combobox"; + +init(); + +export interface XComboboxProps { + value?: string; + placeholder?: string; + name?: string; + disabled?: boolean; + required?: boolean; + open?: boolean; + placement?: string; + defaultValue?: string; + onChangeRequest?: (e: CustomEvent<{ value: string; label: string; previousValue: string }>) => void; + onChange?: (e: CustomEvent<{ value: string; label: string }>) => void; + onInput?: (e: CustomEvent<{ query: string }>) => void; + onToggle?: (e: CustomEvent<{ open: boolean; source: string }>) => void; + ref?: XComboboxElement | ((el: XComboboxElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XCombobox(props: XComboboxProps): JSX.Element { + const [local, others] = splitProps(props, ["value", "defaultValue", "onChangeRequest", "onChange", "onInput", "onToggle", "ref", "children"]); + let el!: XComboboxElement; + + const setRef = (r: XComboboxElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el || local.value !== undefined || local.defaultValue === undefined) return; + el.setAttribute("value", String(local.defaultValue)); + }); + + createEffect(() => { + if (!el) return; + const v = local.value; + if (v === undefined) return; + el.setAttribute("value", String(v)); + }); + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => { + if (local.value !== undefined) e.preventDefault(); + local.onChangeRequest?.(e as CustomEvent<{ value: string; label: string; previousValue: string }>); + }; + el.addEventListener("x-combobox-change-request", handler); + onCleanup(() => el.removeEventListener("x-combobox-change-request", handler)); + } + { + const handler = (e: Event) => local.onChange?.(e as CustomEvent<{ value: string; label: string }>); + el.addEventListener("x-combobox-change", handler); + onCleanup(() => el.removeEventListener("x-combobox-change", handler)); + } + { + const handler = (e: Event) => local.onInput?.(e as CustomEvent<{ query: string }>); + el.addEventListener("x-combobox-input", handler); + onCleanup(() => el.removeEventListener("x-combobox-input", handler)); + } + { + const handler = (e: Event) => local.onToggle?.(e as CustomEvent<{ open: boolean; source: string }>); + el.addEventListener("x-combobox-toggle", handler); + onCleanup(() => el.removeEventListener("x-combobox-toggle", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-command-palette.tsx b/adapters/solid/src/x-command-palette.tsx new file mode 100644 index 0000000..92a170d --- /dev/null +++ b/adapters/solid/src/x-command-palette.tsx @@ -0,0 +1,81 @@ +// x-command-palette.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XCommandPalette as XCommandPaletteElement } from "@vanelsas/baredom/x-command-palette"; +import { init } from "@vanelsas/baredom/x-command-palette"; + +init(); + +export interface XCommandPaletteProps { + items?: any; + open?: boolean; + disabled?: boolean; + onOpenRequest?: (e: CustomEvent<{}>) => void; + onOpen?: (e: CustomEvent<{}>) => void; + onCloseRequest?: (e: CustomEvent<{}>) => void; + onClose?: (e: CustomEvent<{}>) => void; + onSelectRequest?: (e: CustomEvent<{ item: Record }>) => void; + onSelect?: (e: CustomEvent<{ item: Record }>) => void; + onQueryChange?: (e: CustomEvent<{ query: string }>) => void; + ref?: XCommandPaletteElement | ((el: XCommandPaletteElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XCommandPalette(props: XCommandPaletteProps): JSX.Element { + const [local, others] = splitProps(props, ["onOpenRequest", "onOpen", "onCloseRequest", "onClose", "onSelectRequest", "onSelect", "onQueryChange", "ref", "children"]); + let el!: XCommandPaletteElement; + + const setRef = (r: XCommandPaletteElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onOpenRequest?.(e as CustomEvent<{}>); + el.addEventListener("x-command-palette-open-request", handler); + onCleanup(() => el.removeEventListener("x-command-palette-open-request", handler)); + } + { + const handler = (e: Event) => local.onOpen?.(e as CustomEvent<{}>); + el.addEventListener("x-command-palette-open", handler); + onCleanup(() => el.removeEventListener("x-command-palette-open", handler)); + } + { + const handler = (e: Event) => local.onCloseRequest?.(e as CustomEvent<{}>); + el.addEventListener("x-command-palette-close-request", handler); + onCleanup(() => el.removeEventListener("x-command-palette-close-request", handler)); + } + { + const handler = (e: Event) => local.onClose?.(e as CustomEvent<{}>); + el.addEventListener("x-command-palette-close", handler); + onCleanup(() => el.removeEventListener("x-command-palette-close", handler)); + } + { + const handler = (e: Event) => local.onSelectRequest?.(e as CustomEvent<{ item: Record }>); + el.addEventListener("x-command-palette-select-request", handler); + onCleanup(() => el.removeEventListener("x-command-palette-select-request", handler)); + } + { + const handler = (e: Event) => local.onSelect?.(e as CustomEvent<{ item: Record }>); + el.addEventListener("x-command-palette-select", handler); + onCleanup(() => el.removeEventListener("x-command-palette-select", handler)); + } + { + const handler = (e: Event) => local.onQueryChange?.(e as CustomEvent<{ query: string }>); + el.addEventListener("x-command-palette-query-change", handler); + onCleanup(() => el.removeEventListener("x-command-palette-query-change", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-confetti.tsx b/adapters/solid/src/x-confetti.tsx new file mode 100644 index 0000000..1535103 --- /dev/null +++ b/adapters/solid/src/x-confetti.tsx @@ -0,0 +1,59 @@ +// x-confetti.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XConfetti as XConfettiElement } from "@vanelsas/baredom/x-confetti"; +import { init } from "@vanelsas/baredom/x-confetti"; + +init(); + +export interface XConfettiProps { + disabled?: boolean; + spread?: number; + mode?: string; + colors?: string; + duration?: number; + autoFire?: boolean; + gravity?: number; + count?: number; + origin?: string; + velocity?: number; + shapes?: string; + onFire?: (e: CustomEvent<{ count: number; origin: string }>) => void; + onEnd?: (e: CustomEvent<{ duration: number }>) => void; + ref?: XConfettiElement | ((el: XConfettiElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XConfetti(props: XConfettiProps): JSX.Element { + const [local, others] = splitProps(props, ["onFire", "onEnd", "ref", "children"]); + let el!: XConfettiElement; + + const setRef = (r: XConfettiElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onFire?.(e as CustomEvent<{ count: number; origin: string }>); + el.addEventListener("x-confetti-fire", handler); + onCleanup(() => el.removeEventListener("x-confetti-fire", handler)); + } + { + const handler = (e: Event) => local.onEnd?.(e as CustomEvent<{ duration: number }>); + el.addEventListener("x-confetti-end", handler); + onCleanup(() => el.removeEventListener("x-confetti-end", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-container.tsx b/adapters/solid/src/x-container.tsx new file mode 100644 index 0000000..200808f --- /dev/null +++ b/adapters/solid/src/x-container.tsx @@ -0,0 +1,34 @@ +// x-container.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XContainer as XContainerElement } from "@vanelsas/baredom/x-container"; +import { init } from "@vanelsas/baredom/x-container"; + +init(); + +export interface XContainerProps { + center?: boolean; + fluid?: boolean; + ref?: XContainerElement | ((el: XContainerElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XContainer(props: XContainerProps): JSX.Element { + const [local, others] = splitProps(props, ["ref", "children"]); + let el!: XContainerElement; + + const setRef = (r: XContainerElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-context-menu.tsx b/adapters/solid/src/x-context-menu.tsx new file mode 100644 index 0000000..289f831 --- /dev/null +++ b/adapters/solid/src/x-context-menu.tsx @@ -0,0 +1,71 @@ +// x-context-menu.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XContextMenu as XContextMenuElement } from "@vanelsas/baredom/x-context-menu"; +import { init } from "@vanelsas/baredom/x-context-menu"; + +init(); + +export interface XContextMenuProps { + open?: boolean; + disabled?: boolean; + placement?: string; + offset?: string; + zIndex?: string; + onOpenRequest?: (e: CustomEvent<{ reason: string }>) => void; + onOpen?: (e: CustomEvent<{ reason: string }>) => void; + onCloseRequest?: (e: CustomEvent<{ reason: string }>) => void; + onClose?: (e: CustomEvent<{ reason: string }>) => void; + onSelect?: (e: CustomEvent<{ item: Record }>) => void; + ref?: XContextMenuElement | ((el: XContextMenuElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XContextMenu(props: XContextMenuProps): JSX.Element { + const [local, others] = splitProps(props, ["onOpenRequest", "onOpen", "onCloseRequest", "onClose", "onSelect", "ref", "children"]); + let el!: XContextMenuElement; + + const setRef = (r: XContextMenuElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onOpenRequest?.(e as CustomEvent<{ reason: string }>); + el.addEventListener("x-context-menu-open-request", handler); + onCleanup(() => el.removeEventListener("x-context-menu-open-request", handler)); + } + { + const handler = (e: Event) => local.onOpen?.(e as CustomEvent<{ reason: string }>); + el.addEventListener("x-context-menu-open", handler); + onCleanup(() => el.removeEventListener("x-context-menu-open", handler)); + } + { + const handler = (e: Event) => local.onCloseRequest?.(e as CustomEvent<{ reason: string }>); + el.addEventListener("x-context-menu-close-request", handler); + onCleanup(() => el.removeEventListener("x-context-menu-close-request", handler)); + } + { + const handler = (e: Event) => local.onClose?.(e as CustomEvent<{ reason: string }>); + el.addEventListener("x-context-menu-close", handler); + onCleanup(() => el.removeEventListener("x-context-menu-close", handler)); + } + { + const handler = (e: Event) => local.onSelect?.(e as CustomEvent<{ item: Record }>); + el.addEventListener("x-context-menu-select", handler); + onCleanup(() => el.removeEventListener("x-context-menu-select", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-copy.tsx b/adapters/solid/src/x-copy.tsx new file mode 100644 index 0000000..8241b2e --- /dev/null +++ b/adapters/solid/src/x-copy.tsx @@ -0,0 +1,65 @@ +// x-copy.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XCopy as XCopyElement } from "@vanelsas/baredom/x-copy"; +import { init } from "@vanelsas/baredom/x-copy"; + +init(); + +export interface XCopyProps { + errorMessage?: string; + disabled?: boolean; + textValue?: string; + mode?: string; + fromAttr?: string; + tooltipMs?: number; + hotkey?: string; + from?: string; + showTooltip?: boolean; + successMessage?: string; + text?: string; + onRequest?: (e: CustomEvent<{ text: string; mode: string; from: string; fromAttr: string }>) => void; + onSuccess?: (e: CustomEvent<{ text: string }>) => void; + onError?: (e: CustomEvent<{ error: string }>) => void; + ref?: XCopyElement | ((el: XCopyElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XCopy(props: XCopyProps): JSX.Element { + const [local, others] = splitProps(props, ["onRequest", "onSuccess", "onError", "ref", "children"]); + let el!: XCopyElement; + + const setRef = (r: XCopyElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onRequest?.(e as CustomEvent<{ text: string; mode: string; from: string; fromAttr: string }>); + el.addEventListener("x-copy-request", handler); + onCleanup(() => el.removeEventListener("x-copy-request", handler)); + } + { + const handler = (e: Event) => local.onSuccess?.(e as CustomEvent<{ text: string }>); + el.addEventListener("x-copy-success", handler); + onCleanup(() => el.removeEventListener("x-copy-success", handler)); + } + { + const handler = (e: Event) => local.onError?.(e as CustomEvent<{ error: string }>); + el.addEventListener("x-copy-error", handler); + onCleanup(() => el.removeEventListener("x-copy-error", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-currency-field.tsx b/adapters/solid/src/x-currency-field.tsx new file mode 100644 index 0000000..f600685 --- /dev/null +++ b/adapters/solid/src/x-currency-field.tsx @@ -0,0 +1,83 @@ +// x-currency-field.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup, createEffect } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XCurrencyField as XCurrencyFieldElement } from "@vanelsas/baredom/x-currency-field"; +import { init } from "@vanelsas/baredom/x-currency-field"; + +init(); + +export interface XCurrencyFieldProps { + min?: string; + placeholder?: string; + disabled?: boolean; + locale?: string; + name?: string; + value?: string; + hint?: string; + currency?: string; + readOnly?: boolean; + max?: string; + label?: string; + error?: string; + required?: boolean; + defaultValue?: string; + onChangeRequest?: (e: CustomEvent<{ name: string; value: string; previousValue: string }>) => void; + onInput?: (e: CustomEvent<{ name: string; value: string }>) => void; + onChange?: (e: CustomEvent<{ name: string; value: string }>) => void; + ref?: XCurrencyFieldElement | ((el: XCurrencyFieldElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XCurrencyField(props: XCurrencyFieldProps): JSX.Element { + const [local, others] = splitProps(props, ["value", "defaultValue", "onChangeRequest", "onInput", "onChange", "ref", "children"]); + let el!: XCurrencyFieldElement; + + const setRef = (r: XCurrencyFieldElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el || local.value !== undefined || local.defaultValue === undefined) return; + el.setAttribute("value", String(local.defaultValue)); + }); + + createEffect(() => { + if (!el) return; + const v = local.value; + if (v === undefined) return; + el.setAttribute("value", String(v)); + }); + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => { + if (local.value !== undefined) e.preventDefault(); + local.onChangeRequest?.(e as CustomEvent<{ name: string; value: string; previousValue: string }>); + }; + el.addEventListener("x-currency-field-change-request", handler); + onCleanup(() => el.removeEventListener("x-currency-field-change-request", handler)); + } + { + const handler = (e: Event) => local.onInput?.(e as CustomEvent<{ name: string; value: string }>); + el.addEventListener("x-currency-field-input", handler); + onCleanup(() => el.removeEventListener("x-currency-field-input", handler)); + } + { + const handler = (e: Event) => local.onChange?.(e as CustomEvent<{ name: string; value: string }>); + el.addEventListener("x-currency-field-change", handler); + onCleanup(() => el.removeEventListener("x-currency-field-change", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-date-picker.tsx b/adapters/solid/src/x-date-picker.tsx new file mode 100644 index 0000000..9e6ea0e --- /dev/null +++ b/adapters/solid/src/x-date-picker.tsx @@ -0,0 +1,62 @@ +// x-date-picker.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XDatePicker as XDatePickerElement } from "@vanelsas/baredom/x-date-picker"; +import { init } from "@vanelsas/baredom/x-date-picker"; + +init(); + +export interface XDatePickerProps { + mode?: string; + value?: string; + start?: string; + end?: string; + disabled?: boolean; + readOnly?: boolean; + required?: boolean; + open?: boolean; + onInput?: (e: CustomEvent<{ value: string; mode: string }>) => void; + onChangeRequest?: (e: CustomEvent<{ value: string; mode: string; reason: string }>) => void; + onChange?: (e: CustomEvent<{ value: string; mode: string; reason: string }>) => void; + ref?: XDatePickerElement | ((el: XDatePickerElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XDatePicker(props: XDatePickerProps): JSX.Element { + const [local, others] = splitProps(props, ["onInput", "onChangeRequest", "onChange", "ref", "children"]); + let el!: XDatePickerElement; + + const setRef = (r: XDatePickerElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onInput?.(e as CustomEvent<{ value: string; mode: string }>); + el.addEventListener("x-date-picker-input", handler); + onCleanup(() => el.removeEventListener("x-date-picker-input", handler)); + } + { + const handler = (e: Event) => local.onChangeRequest?.(e as CustomEvent<{ value: string; mode: string; reason: string }>); + el.addEventListener("x-date-picker-change-request", handler); + onCleanup(() => el.removeEventListener("x-date-picker-change-request", handler)); + } + { + const handler = (e: Event) => local.onChange?.(e as CustomEvent<{ value: string; mode: string; reason: string }>); + el.addEventListener("x-date-picker-change", handler); + onCleanup(() => el.removeEventListener("x-date-picker-change", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-divider.tsx b/adapters/solid/src/x-divider.tsx new file mode 100644 index 0000000..73cfe3e --- /dev/null +++ b/adapters/solid/src/x-divider.tsx @@ -0,0 +1,40 @@ +// x-divider.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XDivider as XDividerElement } from "@vanelsas/baredom/x-divider"; +import { init } from "@vanelsas/baredom/x-divider"; + +init(); + +export interface XDividerProps { + orientation?: string; + variant?: string; + align?: string; + label?: string; + thickness?: string; + color?: string; + inset?: string; + length?: string; + ref?: XDividerElement | ((el: XDividerElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XDivider(props: XDividerProps): JSX.Element { + const [local, others] = splitProps(props, ["ref", "children"]); + let el!: XDividerElement; + + const setRef = (r: XDividerElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-drawer.tsx b/adapters/solid/src/x-drawer.tsx new file mode 100644 index 0000000..fa9f381 --- /dev/null +++ b/adapters/solid/src/x-drawer.tsx @@ -0,0 +1,51 @@ +// x-drawer.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XDrawer as XDrawerElement } from "@vanelsas/baredom/x-drawer"; +import { init } from "@vanelsas/baredom/x-drawer"; + +init(); + +export interface XDrawerProps { + open?: boolean; + placement?: string; + label?: string; + onToggle?: (e: CustomEvent<{ open: boolean }>) => void; + onDismiss?: (e: CustomEvent<{ reason: string }>) => void; + ref?: XDrawerElement | ((el: XDrawerElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XDrawer(props: XDrawerProps): JSX.Element { + const [local, others] = splitProps(props, ["onToggle", "onDismiss", "ref", "children"]); + let el!: XDrawerElement; + + const setRef = (r: XDrawerElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onToggle?.(e as CustomEvent<{ open: boolean }>); + el.addEventListener("x-drawer-toggle", handler); + onCleanup(() => el.removeEventListener("x-drawer-toggle", handler)); + } + { + const handler = (e: Event) => local.onDismiss?.(e as CustomEvent<{ reason: string }>); + el.addEventListener("x-drawer-dismiss", handler); + onCleanup(() => el.removeEventListener("x-drawer-dismiss", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-dropdown.tsx b/adapters/solid/src/x-dropdown.tsx new file mode 100644 index 0000000..caebc67 --- /dev/null +++ b/adapters/solid/src/x-dropdown.tsx @@ -0,0 +1,52 @@ +// x-dropdown.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XDropdown as XDropdownElement } from "@vanelsas/baredom/x-dropdown"; +import { init } from "@vanelsas/baredom/x-dropdown"; + +init(); + +export interface XDropdownProps { + open?: boolean; + disabled?: boolean; + label?: string; + placement?: string; + onToggle?: (e: CustomEvent<{ open: boolean; source: string }>) => void; + onChange?: (e: CustomEvent<{ open: boolean }>) => void; + ref?: XDropdownElement | ((el: XDropdownElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XDropdown(props: XDropdownProps): JSX.Element { + const [local, others] = splitProps(props, ["onToggle", "onChange", "ref", "children"]); + let el!: XDropdownElement; + + const setRef = (r: XDropdownElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onToggle?.(e as CustomEvent<{ open: boolean; source: string }>); + el.addEventListener("x-dropdown-toggle", handler); + onCleanup(() => el.removeEventListener("x-dropdown-toggle", handler)); + } + { + const handler = (e: Event) => local.onChange?.(e as CustomEvent<{ open: boolean }>); + el.addEventListener("x-dropdown-change", handler); + onCleanup(() => el.removeEventListener("x-dropdown-change", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-fieldset.tsx b/adapters/solid/src/x-fieldset.tsx new file mode 100644 index 0000000..74b7098 --- /dev/null +++ b/adapters/solid/src/x-fieldset.tsx @@ -0,0 +1,34 @@ +// x-fieldset.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XFieldset as XFieldsetElement } from "@vanelsas/baredom/x-fieldset"; +import { init } from "@vanelsas/baredom/x-fieldset"; + +init(); + +export interface XFieldsetProps { + legend?: string; + disabled?: boolean; + ref?: XFieldsetElement | ((el: XFieldsetElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XFieldset(props: XFieldsetProps): JSX.Element { + const [local, others] = splitProps(props, ["ref", "children"]); + let el!: XFieldsetElement; + + const setRef = (r: XFieldsetElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-file-download.tsx b/adapters/solid/src/x-file-download.tsx new file mode 100644 index 0000000..dbf0f39 --- /dev/null +++ b/adapters/solid/src/x-file-download.tsx @@ -0,0 +1,45 @@ +// x-file-download.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XFileDownload as XFileDownloadElement } from "@vanelsas/baredom/x-file-download"; +import { init } from "@vanelsas/baredom/x-file-download"; + +init(); + +export interface XFileDownloadProps { + href?: string; + filename?: string; + disabled?: boolean; + onClick?: (e: CustomEvent<{ href: string; filename: string }>) => void; + ref?: XFileDownloadElement | ((el: XFileDownloadElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XFileDownload(props: XFileDownloadProps): JSX.Element { + const [local, others] = splitProps(props, ["onClick", "ref", "children"]); + let el!: XFileDownloadElement; + + const setRef = (r: XFileDownloadElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onClick?.(e as CustomEvent<{ href: string; filename: string }>); + el.addEventListener("x-file-download-click", handler); + onCleanup(() => el.removeEventListener("x-file-download-click", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-file-upload.tsx b/adapters/solid/src/x-file-upload.tsx new file mode 100644 index 0000000..8df5f42 --- /dev/null +++ b/adapters/solid/src/x-file-upload.tsx @@ -0,0 +1,55 @@ +// x-file-upload.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XFileUpload as XFileUploadElement } from "@vanelsas/baredom/x-file-upload"; +import { init } from "@vanelsas/baredom/x-file-upload"; + +init(); + +export interface XFileUploadProps { + accept?: string; + multiple?: boolean; + maxSize?: number; + maxFiles?: number; + disabled?: boolean; + required?: boolean; + name?: string; + onSelect?: (e: CustomEvent<{ files: any; rejected: any }>) => void; + onRemove?: (e: CustomEvent<{ file: Record; remaining: any }>) => void; + ref?: XFileUploadElement | ((el: XFileUploadElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XFileUpload(props: XFileUploadProps): JSX.Element { + const [local, others] = splitProps(props, ["onSelect", "onRemove", "ref", "children"]); + let el!: XFileUploadElement; + + const setRef = (r: XFileUploadElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onSelect?.(e as CustomEvent<{ files: any; rejected: any }>); + el.addEventListener("x-file-upload-select", handler); + onCleanup(() => el.removeEventListener("x-file-upload-select", handler)); + } + { + const handler = (e: Event) => local.onRemove?.(e as CustomEvent<{ file: Record; remaining: any }>); + el.addEventListener("x-file-upload-remove", handler); + onCleanup(() => el.removeEventListener("x-file-upload-remove", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-form-field.tsx b/adapters/solid/src/x-form-field.tsx new file mode 100644 index 0000000..84eb9f0 --- /dev/null +++ b/adapters/solid/src/x-form-field.tsx @@ -0,0 +1,57 @@ +// x-form-field.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XFormField as XFormFieldElement } from "@vanelsas/baredom/x-form-field"; +import { init } from "@vanelsas/baredom/x-form-field"; + +init(); + +export interface XFormFieldProps { + placeholder?: string; + disabled?: boolean; + name?: string; + value?: string; + readonly?: boolean; + type?: string; + label?: string; + autocomplete?: string; + required?: boolean; + onInput?: (e: CustomEvent<{ name: string; value: string }>) => void; + onChange?: (e: CustomEvent<{ name: string; value: string }>) => void; + ref?: XFormFieldElement | ((el: XFormFieldElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XFormField(props: XFormFieldProps): JSX.Element { + const [local, others] = splitProps(props, ["onInput", "onChange", "ref", "children"]); + let el!: XFormFieldElement; + + const setRef = (r: XFormFieldElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onInput?.(e as CustomEvent<{ name: string; value: string }>); + el.addEventListener("x-form-field-input", handler); + onCleanup(() => el.removeEventListener("x-form-field-input", handler)); + } + { + const handler = (e: Event) => local.onChange?.(e as CustomEvent<{ name: string; value: string }>); + el.addEventListener("x-form-field-change", handler); + onCleanup(() => el.removeEventListener("x-form-field-change", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-form.tsx b/adapters/solid/src/x-form.tsx new file mode 100644 index 0000000..a95dc73 --- /dev/null +++ b/adapters/solid/src/x-form.tsx @@ -0,0 +1,51 @@ +// x-form.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XForm as XFormElement } from "@vanelsas/baredom/x-form"; +import { init } from "@vanelsas/baredom/x-form"; + +init(); + +export interface XFormProps { + loading?: boolean; + novalidate?: boolean; + autocomplete?: string; + onSubmit?: (e: CustomEvent<{ values: Record }>) => void; + onReset?: (e: CustomEvent<{}>) => void; + ref?: XFormElement | ((el: XFormElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XForm(props: XFormProps): JSX.Element { + const [local, others] = splitProps(props, ["onSubmit", "onReset", "ref", "children"]); + let el!: XFormElement; + + const setRef = (r: XFormElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onSubmit?.(e as CustomEvent<{ values: Record }>); + el.addEventListener("x-form-submit", handler); + onCleanup(() => el.removeEventListener("x-form-submit", handler)); + } + { + const handler = (e: Event) => local.onReset?.(e as CustomEvent<{}>); + el.addEventListener("x-form-reset", handler); + onCleanup(() => el.removeEventListener("x-form-reset", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-gaussian-blur.tsx b/adapters/solid/src/x-gaussian-blur.tsx new file mode 100644 index 0000000..36b5779 --- /dev/null +++ b/adapters/solid/src/x-gaussian-blur.tsx @@ -0,0 +1,41 @@ +// x-gaussian-blur.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XGaussianBlur as XGaussianBlurElement } from "@vanelsas/baredom/x-gaussian-blur"; +import { init } from "@vanelsas/baredom/x-gaussian-blur"; + +init(); + +export interface XGaussianBlurProps { + paused?: boolean; + animation?: string; + speed?: string; + colors?: string; + size?: string; + blur?: string; + opacity?: string; + count?: string; + blend?: string; + ref?: XGaussianBlurElement | ((el: XGaussianBlurElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XGaussianBlur(props: XGaussianBlurProps): JSX.Element { + const [local, others] = splitProps(props, ["ref", "children"]); + let el!: XGaussianBlurElement; + + const setRef = (r: XGaussianBlurElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-grid.tsx b/adapters/solid/src/x-grid.tsx new file mode 100644 index 0000000..0a5078e --- /dev/null +++ b/adapters/solid/src/x-grid.tsx @@ -0,0 +1,32 @@ +// x-grid.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XGrid as XGridElement } from "@vanelsas/baredom/x-grid"; +import { init } from "@vanelsas/baredom/x-grid"; + +init(); + +export interface XGridProps { + ref?: XGridElement | ((el: XGridElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XGrid(props: XGridProps): JSX.Element { + const [local, others] = splitProps(props, ["ref", "children"]); + let el!: XGridElement; + + const setRef = (r: XGridElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-i18n-provider.tsx b/adapters/solid/src/x-i18n-provider.tsx new file mode 100644 index 0000000..d5aa816 --- /dev/null +++ b/adapters/solid/src/x-i18n-provider.tsx @@ -0,0 +1,57 @@ +// x-i18n-provider.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XI18nProvider as XI18nProviderElement } from "@vanelsas/baredom/x-i18n-provider"; +import { init } from "@vanelsas/baredom/x-i18n-provider"; + +init(); + +export interface XI18nProviderProps { + src?: string; + locale?: string; + fallbackLocale?: string; + onXI18nLoading?: (e: CustomEvent<{ locale: string }>) => void; + onXI18nChange?: (e: CustomEvent<{ locale: string }>) => void; + onXI18nError?: (e: CustomEvent<{ locale: string; message: string }>) => void; + ref?: XI18nProviderElement | ((el: XI18nProviderElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XI18nProvider(props: XI18nProviderProps): JSX.Element { + const [local, others] = splitProps(props, ["onXI18nLoading", "onXI18nChange", "onXI18nError", "ref", "children"]); + let el!: XI18nProviderElement; + + const setRef = (r: XI18nProviderElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onXI18nLoading?.(e as CustomEvent<{ locale: string }>); + el.addEventListener("x-i18n-loading", handler); + onCleanup(() => el.removeEventListener("x-i18n-loading", handler)); + } + { + const handler = (e: Event) => local.onXI18nChange?.(e as CustomEvent<{ locale: string }>); + el.addEventListener("x-i18n-change", handler); + onCleanup(() => el.removeEventListener("x-i18n-change", handler)); + } + { + const handler = (e: Event) => local.onXI18nError?.(e as CustomEvent<{ locale: string; message: string }>); + el.addEventListener("x-i18n-error", handler); + onCleanup(() => el.removeEventListener("x-i18n-error", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-i18n.tsx b/adapters/solid/src/x-i18n.tsx new file mode 100644 index 0000000..3d912dd --- /dev/null +++ b/adapters/solid/src/x-i18n.tsx @@ -0,0 +1,34 @@ +// x-i18n.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XI18n as XI18nElement } from "@vanelsas/baredom/x-i18n"; +import { init } from "@vanelsas/baredom/x-i18n"; + +init(); + +export interface XI18nProps { + key?: string; + params?: string; + ref?: XI18nElement | ((el: XI18nElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XI18n(props: XI18nProps): JSX.Element { + const [local, others] = splitProps(props, ["ref", "children"]); + let el!: XI18nElement; + + const setRef = (r: XI18nElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-icon.tsx b/adapters/solid/src/x-icon.tsx new file mode 100644 index 0000000..cd11a18 --- /dev/null +++ b/adapters/solid/src/x-icon.tsx @@ -0,0 +1,35 @@ +// x-icon.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XIcon as XIconElement } from "@vanelsas/baredom/x-icon"; +import { init } from "@vanelsas/baredom/x-icon"; + +init(); + +export interface XIconProps { + size?: string; + color?: string; + label?: string; + ref?: XIconElement | ((el: XIconElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XIcon(props: XIconProps): JSX.Element { + const [local, others] = splitProps(props, ["ref", "children"]); + let el!: XIconElement; + + const setRef = (r: XIconElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-image.tsx b/adapters/solid/src/x-image.tsx new file mode 100644 index 0000000..1289e5b --- /dev/null +++ b/adapters/solid/src/x-image.tsx @@ -0,0 +1,55 @@ +// x-image.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XImage as XImageElement } from "@vanelsas/baredom/x-image"; +import { init } from "@vanelsas/baredom/x-image"; + +init(); + +export interface XImageProps { + alt?: string; + fit?: string; + src?: string; + decorative?: boolean; + loading?: string; + ratio?: string; + position?: string; + onLoad?: (e: CustomEvent<{ src: string; naturalWidth: number; naturalHeight: number }>) => void; + onError?: (e: CustomEvent<{ src: string }>) => void; + ref?: XImageElement | ((el: XImageElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XImage(props: XImageProps): JSX.Element { + const [local, others] = splitProps(props, ["onLoad", "onError", "ref", "children"]); + let el!: XImageElement; + + const setRef = (r: XImageElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onLoad?.(e as CustomEvent<{ src: string; naturalWidth: number; naturalHeight: number }>); + el.addEventListener("x-image-load", handler); + onCleanup(() => el.removeEventListener("x-image-load", handler)); + } + { + const handler = (e: Event) => local.onError?.(e as CustomEvent<{ src: string }>); + el.addEventListener("x-image-error", handler); + onCleanup(() => el.removeEventListener("x-image-error", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-kbd.tsx b/adapters/solid/src/x-kbd.tsx new file mode 100644 index 0000000..f0326dc --- /dev/null +++ b/adapters/solid/src/x-kbd.tsx @@ -0,0 +1,37 @@ +// x-kbd.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XKbd as XKbdElement } from "@vanelsas/baredom/x-kbd"; +import { init } from "@vanelsas/baredom/x-kbd"; + +init(); + +export interface XKbdProps { + keys?: string; + separator?: string; + size?: string; + platform?: string; + label?: string; + ref?: XKbdElement | ((el: XKbdElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XKbd(props: XKbdProps): JSX.Element { + const [local, others] = splitProps(props, ["ref", "children"]); + let el!: XKbdElement; + + const setRef = (r: XKbdElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-kinetic-canvas.tsx b/adapters/solid/src/x-kinetic-canvas.tsx new file mode 100644 index 0000000..9acec7d --- /dev/null +++ b/adapters/solid/src/x-kinetic-canvas.tsx @@ -0,0 +1,38 @@ +// x-kinetic-canvas.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XKineticCanvas as XKineticCanvasElement } from "@vanelsas/baredom/x-kinetic-canvas"; +import { init } from "@vanelsas/baredom/x-kinetic-canvas"; + +init(); + +export interface XKineticCanvasProps { + type?: string; + variant?: string; + speed?: string; + density?: string; + fullscreen?: boolean; + paused?: boolean; + ref?: XKineticCanvasElement | ((el: XKineticCanvasElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XKineticCanvas(props: XKineticCanvasProps): JSX.Element { + const [local, others] = splitProps(props, ["ref", "children"]); + let el!: XKineticCanvasElement; + + const setRef = (r: XKineticCanvasElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-kinetic-font.tsx b/adapters/solid/src/x-kinetic-font.tsx new file mode 100644 index 0000000..2ea81e2 --- /dev/null +++ b/adapters/solid/src/x-kinetic-font.tsx @@ -0,0 +1,58 @@ +// x-kinetic-font.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XKineticFont as XKineticFontElement } from "@vanelsas/baredom/x-kinetic-font"; +import { init } from "@vanelsas/baredom/x-kinetic-font"; + +init(); + +export interface XKineticFontProps { + mass?: number; + tension?: number; + mode?: string; + perChar?: boolean; + radius?: number; + intensity?: number; + fontFamily?: string; + friction?: number; + trigger?: string; + text?: string; + onSpringActivate?: (e: CustomEvent<{}>) => void; + onSpringSettle?: (e: CustomEvent<{}>) => void; + ref?: XKineticFontElement | ((el: XKineticFontElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XKineticFont(props: XKineticFontProps): JSX.Element { + const [local, others] = splitProps(props, ["onSpringActivate", "onSpringSettle", "ref", "children"]); + let el!: XKineticFontElement; + + const setRef = (r: XKineticFontElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onSpringActivate?.(e as CustomEvent<{}>); + el.addEventListener("x-kinetic-font-spring-activate", handler); + onCleanup(() => el.removeEventListener("x-kinetic-font-spring-activate", handler)); + } + { + const handler = (e: Event) => local.onSpringSettle?.(e as CustomEvent<{}>); + el.addEventListener("x-kinetic-font-spring-settle", handler); + onCleanup(() => el.removeEventListener("x-kinetic-font-spring-settle", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-kinetic-typography.tsx b/adapters/solid/src/x-kinetic-typography.tsx new file mode 100644 index 0000000..4d7357b --- /dev/null +++ b/adapters/solid/src/x-kinetic-typography.tsx @@ -0,0 +1,47 @@ +// x-kinetic-typography.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XKineticTypography as XKineticTypographyElement } from "@vanelsas/baredom/x-kinetic-typography"; +import { init } from "@vanelsas/baredom/x-kinetic-typography"; + +init(); + +export interface XKineticTypographyProps { + path?: string; + startSize?: string; + animation?: string; + speed?: string; + echoCount?: string; + echoScale?: string; + echoOpacity?: string; + preset?: string; + repeat?: string; + fontSize?: string; + effect?: string; + echoDelay?: string; + endSize?: string; + direction?: string; + text?: string; + ref?: XKineticTypographyElement | ((el: XKineticTypographyElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XKineticTypography(props: XKineticTypographyProps): JSX.Element { + const [local, others] = splitProps(props, ["ref", "children"]); + let el!: XKineticTypographyElement; + + const setRef = (r: XKineticTypographyElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-liquid-dock.tsx b/adapters/solid/src/x-liquid-dock.tsx new file mode 100644 index 0000000..1af4545 --- /dev/null +++ b/adapters/solid/src/x-liquid-dock.tsx @@ -0,0 +1,53 @@ +// x-liquid-dock.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XLiquidDock as XLiquidDockElement } from "@vanelsas/baredom/x-liquid-dock"; +import { init } from "@vanelsas/baredom/x-liquid-dock"; + +init(); + +export interface XLiquidDockProps { + rippleScale?: number; + color?: string; + magnetStrength?: number; + disabled?: boolean; + threshold?: string; + magnetRadius?: number; + bobIntensity?: number; + blur?: number; + rippleSpeed?: number; + gap?: number; + position?: string; + onSelect?: (e: CustomEvent<{ index: number; item: any; source: string }>) => void; + ref?: XLiquidDockElement | ((el: XLiquidDockElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XLiquidDock(props: XLiquidDockProps): JSX.Element { + const [local, others] = splitProps(props, ["onSelect", "ref", "children"]); + let el!: XLiquidDockElement; + + const setRef = (r: XLiquidDockElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onSelect?.(e as CustomEvent<{ index: number; item: any; source: string }>); + el.addEventListener("x-liquid-dock-select", handler); + onCleanup(() => el.removeEventListener("x-liquid-dock-select", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-liquid-fill.tsx b/adapters/solid/src/x-liquid-fill.tsx new file mode 100644 index 0000000..0b2cf57 --- /dev/null +++ b/adapters/solid/src/x-liquid-fill.tsx @@ -0,0 +1,50 @@ +// x-liquid-fill.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XLiquidFill as XLiquidFillElement } from "@vanelsas/baredom/x-liquid-fill"; +import { init } from "@vanelsas/baredom/x-liquid-fill"; + +init(); + +export interface XLiquidFillProps { + waveIntensity?: number; + disabled?: boolean; + splashIntensity?: number; + mode?: string; + orientation?: string; + theme?: string; + layers?: number; + target?: string; + onProgress?: (e: CustomEvent<{ progress: number; velocity: number }>) => void; + ref?: XLiquidFillElement | ((el: XLiquidFillElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XLiquidFill(props: XLiquidFillProps): JSX.Element { + const [local, others] = splitProps(props, ["onProgress", "ref", "children"]); + let el!: XLiquidFillElement; + + const setRef = (r: XLiquidFillElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onProgress?.(e as CustomEvent<{ progress: number; velocity: number }>); + el.addEventListener("x-liquid-fill-progress", handler); + onCleanup(() => el.removeEventListener("x-liquid-fill-progress", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-liquid-glass.tsx b/adapters/solid/src/x-liquid-glass.tsx new file mode 100644 index 0000000..c7bf913 --- /dev/null +++ b/adapters/solid/src/x-liquid-glass.tsx @@ -0,0 +1,46 @@ +// x-liquid-glass.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XLiquidGlass as XLiquidGlassElement } from "@vanelsas/baredom/x-liquid-glass"; +import { init } from "@vanelsas/baredom/x-liquid-glass"; + +init(); + +export interface XLiquidGlassProps { + frost?: number; + goo?: number; + amplitude?: number; + specularSize?: number; + disabled?: boolean; + speed?: number; + mode?: string; + specular?: boolean; + tint?: string; + color2?: string; + blur?: number; + blobs?: number; + color1?: string; + specularIntensity?: number; + ref?: XLiquidGlassElement | ((el: XLiquidGlassElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XLiquidGlass(props: XLiquidGlassProps): JSX.Element { + const [local, others] = splitProps(props, ["ref", "children"]); + let el!: XLiquidGlassElement; + + const setRef = (r: XLiquidGlassElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-menu-item.tsx b/adapters/solid/src/x-menu-item.tsx new file mode 100644 index 0000000..6f4b88e --- /dev/null +++ b/adapters/solid/src/x-menu-item.tsx @@ -0,0 +1,46 @@ +// x-menu-item.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XMenuItem as XMenuItemElement } from "@vanelsas/baredom/x-menu-item"; +import { init } from "@vanelsas/baredom/x-menu-item"; + +init(); + +export interface XMenuItemProps { + value?: string; + disabled?: boolean; + variant?: string; + type?: string; + onSelect?: (e: CustomEvent<{ value: string }>) => void; + ref?: XMenuItemElement | ((el: XMenuItemElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XMenuItem(props: XMenuItemProps): JSX.Element { + const [local, others] = splitProps(props, ["onSelect", "ref", "children"]); + let el!: XMenuItemElement; + + const setRef = (r: XMenuItemElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onSelect?.(e as CustomEvent<{ value: string }>); + el.addEventListener("x-menu-item-select", handler); + onCleanup(() => el.removeEventListener("x-menu-item-select", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-menu.tsx b/adapters/solid/src/x-menu.tsx new file mode 100644 index 0000000..6f1ac81 --- /dev/null +++ b/adapters/solid/src/x-menu.tsx @@ -0,0 +1,57 @@ +// x-menu.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XMenu as XMenuElement } from "@vanelsas/baredom/x-menu"; +import { init } from "@vanelsas/baredom/x-menu"; + +init(); + +export interface XMenuProps { + open?: boolean; + placement?: string; + label?: string; + onOpen?: (e: CustomEvent<{}>) => void; + onClose?: (e: CustomEvent<{}>) => void; + onSelect?: (e: CustomEvent<{ value: string }>) => void; + ref?: XMenuElement | ((el: XMenuElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XMenu(props: XMenuProps): JSX.Element { + const [local, others] = splitProps(props, ["onOpen", "onClose", "onSelect", "ref", "children"]); + let el!: XMenuElement; + + const setRef = (r: XMenuElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onOpen?.(e as CustomEvent<{}>); + el.addEventListener("x-menu-open", handler); + onCleanup(() => el.removeEventListener("x-menu-open", handler)); + } + { + const handler = (e: Event) => local.onClose?.(e as CustomEvent<{}>); + el.addEventListener("x-menu-close", handler); + onCleanup(() => el.removeEventListener("x-menu-close", handler)); + } + { + const handler = (e: Event) => local.onSelect?.(e as CustomEvent<{ value: string }>); + el.addEventListener("x-menu-select", handler); + onCleanup(() => el.removeEventListener("x-menu-select", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-metaball-cursor.tsx b/adapters/solid/src/x-metaball-cursor.tsx new file mode 100644 index 0000000..c106832 --- /dev/null +++ b/adapters/solid/src/x-metaball-cursor.tsx @@ -0,0 +1,42 @@ +// x-metaball-cursor.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XMetaballCursor as XMetaballCursorElement } from "@vanelsas/baredom/x-metaball-cursor"; +import { init } from "@vanelsas/baredom/x-metaball-cursor"; + +init(); + +export interface XMetaballCursorProps { + color?: string; + blobSize?: number; + noiseIntensity?: number; + palette?: string; + noiseScale?: number; + noise?: boolean; + threshold?: string; + blur?: number; + noiseSpeed?: number; + blobCount?: number; + ref?: XMetaballCursorElement | ((el: XMetaballCursorElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XMetaballCursor(props: XMetaballCursorProps): JSX.Element { + const [local, others] = splitProps(props, ["ref", "children"]); + let el!: XMetaballCursorElement; + + const setRef = (r: XMetaballCursorElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-modal.tsx b/adapters/solid/src/x-modal.tsx new file mode 100644 index 0000000..05d5f2e --- /dev/null +++ b/adapters/solid/src/x-modal.tsx @@ -0,0 +1,51 @@ +// x-modal.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XModal as XModalElement } from "@vanelsas/baredom/x-modal"; +import { init } from "@vanelsas/baredom/x-modal"; + +init(); + +export interface XModalProps { + open?: boolean; + size?: string; + label?: string; + onToggle?: (e: CustomEvent<{ open: boolean }>) => void; + onDismiss?: (e: CustomEvent<{ reason: string }>) => void; + ref?: XModalElement | ((el: XModalElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XModal(props: XModalProps): JSX.Element { + const [local, others] = splitProps(props, ["onToggle", "onDismiss", "ref", "children"]); + let el!: XModalElement; + + const setRef = (r: XModalElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onToggle?.(e as CustomEvent<{ open: boolean }>); + el.addEventListener("x-modal-toggle", handler); + onCleanup(() => el.removeEventListener("x-modal-toggle", handler)); + } + { + const handler = (e: Event) => local.onDismiss?.(e as CustomEvent<{ reason: string }>); + el.addEventListener("x-modal-dismiss", handler); + onCleanup(() => el.removeEventListener("x-modal-dismiss", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-morph-stack.tsx b/adapters/solid/src/x-morph-stack.tsx new file mode 100644 index 0000000..fae7983 --- /dev/null +++ b/adapters/solid/src/x-morph-stack.tsx @@ -0,0 +1,56 @@ +// x-morph-stack.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XMorphStack as XMorphStackElement } from "@vanelsas/baredom/x-morph-stack"; +import { init } from "@vanelsas/baredom/x-morph-stack"; + +init(); + +export interface XMorphStackProps { + activeState?: string; + activeIndex?: number; + stiffness?: number; + damping?: number; + mass?: number; + variant?: string; + duration?: number; + disabled?: boolean; + onChange?: (e: CustomEvent<{ from: string; to: string; reason: string }>) => void; + onChanged?: (e: CustomEvent<{ from: string; to: string }>) => void; + ref?: XMorphStackElement | ((el: XMorphStackElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XMorphStack(props: XMorphStackProps): JSX.Element { + const [local, others] = splitProps(props, ["onChange", "onChanged", "ref", "children"]); + let el!: XMorphStackElement; + + const setRef = (r: XMorphStackElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onChange?.(e as CustomEvent<{ from: string; to: string; reason: string }>); + el.addEventListener("x-morph-stack-change", handler); + onCleanup(() => el.removeEventListener("x-morph-stack-change", handler)); + } + { + const handler = (e: Event) => local.onChanged?.(e as CustomEvent<{ from: string; to: string }>); + el.addEventListener("x-morph-stack-changed", handler); + onCleanup(() => el.removeEventListener("x-morph-stack-changed", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-multi-combobox.tsx b/adapters/solid/src/x-multi-combobox.tsx new file mode 100644 index 0000000..f53e396 --- /dev/null +++ b/adapters/solid/src/x-multi-combobox.tsx @@ -0,0 +1,68 @@ +// x-multi-combobox.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XMultiCombobox as XMultiComboboxElement } from "@vanelsas/baredom/x-multi-combobox"; +import { init } from "@vanelsas/baredom/x-multi-combobox"; + +init(); + +export interface XMultiComboboxProps { + value?: string; + placeholder?: string; + name?: string; + disabled?: boolean; + required?: boolean; + open?: boolean; + placement?: string; + max?: number; + onChangeRequest?: (e: CustomEvent<{ value: any; action: string; item: string }>) => void; + onChange?: (e: CustomEvent<{ value: any }>) => void; + onInput?: (e: CustomEvent<{ query: string }>) => void; + onToggle?: (e: CustomEvent<{ open: boolean; source: string }>) => void; + ref?: XMultiComboboxElement | ((el: XMultiComboboxElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XMultiCombobox(props: XMultiComboboxProps): JSX.Element { + const [local, others] = splitProps(props, ["onChangeRequest", "onChange", "onInput", "onToggle", "ref", "children"]); + let el!: XMultiComboboxElement; + + const setRef = (r: XMultiComboboxElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onChangeRequest?.(e as CustomEvent<{ value: any; action: string; item: string }>); + el.addEventListener("x-multi-combobox-change-request", handler); + onCleanup(() => el.removeEventListener("x-multi-combobox-change-request", handler)); + } + { + const handler = (e: Event) => local.onChange?.(e as CustomEvent<{ value: any }>); + el.addEventListener("x-multi-combobox-change", handler); + onCleanup(() => el.removeEventListener("x-multi-combobox-change", handler)); + } + { + const handler = (e: Event) => local.onInput?.(e as CustomEvent<{ query: string }>); + el.addEventListener("x-multi-combobox-input", handler); + onCleanup(() => el.removeEventListener("x-multi-combobox-input", handler)); + } + { + const handler = (e: Event) => local.onToggle?.(e as CustomEvent<{ open: boolean; source: string }>); + el.addEventListener("x-multi-combobox-toggle", handler); + onCleanup(() => el.removeEventListener("x-multi-combobox-toggle", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-navbar.tsx b/adapters/solid/src/x-navbar.tsx new file mode 100644 index 0000000..67630ac --- /dev/null +++ b/adapters/solid/src/x-navbar.tsx @@ -0,0 +1,61 @@ +// x-navbar.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XNavbar as XNavbarElement } from "@vanelsas/baredom/x-navbar"; +import { init } from "@vanelsas/baredom/x-navbar"; + +init(); + +export interface XNavbarProps { + sticky?: boolean; + elevated?: boolean; + label?: string; + variant?: string; + orientation?: string; + alignment?: string; + breakpoint?: string; + onFocusVisible?: (e: CustomEvent<{}>) => void; + onNavigate?: (e: CustomEvent<{ href: string; source: string }>) => void; + onBrandActivate?: (e: CustomEvent<{ source: string }>) => void; + ref?: XNavbarElement | ((el: XNavbarElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XNavbar(props: XNavbarProps): JSX.Element { + const [local, others] = splitProps(props, ["onFocusVisible", "onNavigate", "onBrandActivate", "ref", "children"]); + let el!: XNavbarElement; + + const setRef = (r: XNavbarElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onFocusVisible?.(e as CustomEvent<{}>); + el.addEventListener("focus-visible", handler); + onCleanup(() => el.removeEventListener("focus-visible", handler)); + } + { + const handler = (e: Event) => local.onNavigate?.(e as CustomEvent<{ href: string; source: string }>); + el.addEventListener("navigate", handler); + onCleanup(() => el.removeEventListener("navigate", handler)); + } + { + const handler = (e: Event) => local.onBrandActivate?.(e as CustomEvent<{ source: string }>); + el.addEventListener("brand-activate", handler); + onCleanup(() => el.removeEventListener("brand-activate", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-neural-glow.tsx b/adapters/solid/src/x-neural-glow.tsx new file mode 100644 index 0000000..5fd55b1 --- /dev/null +++ b/adapters/solid/src/x-neural-glow.tsx @@ -0,0 +1,42 @@ +// x-neural-glow.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XNeuralGlow as XNeuralGlowElement } from "@vanelsas/baredom/x-neural-glow"; +import { init } from "@vanelsas/baredom/x-neural-glow"; + +init(); + +export interface XNeuralGlowProps { + colorBackground?: string; + interactive?: boolean; + orbCount?: number; + restRate?: number; + colorPrimary?: string; + orbSize?: number; + opacity?: number; + colorSecondary?: string; + pulseSpeed?: number; + connectionDistance?: number; + ref?: XNeuralGlowElement | ((el: XNeuralGlowElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XNeuralGlow(props: XNeuralGlowProps): JSX.Element { + const [local, others] = splitProps(props, ["ref", "children"]); + let el!: XNeuralGlowElement; + + const setRef = (r: XNeuralGlowElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-notification-center.tsx b/adapters/solid/src/x-notification-center.tsx new file mode 100644 index 0000000..c059fcb --- /dev/null +++ b/adapters/solid/src/x-notification-center.tsx @@ -0,0 +1,56 @@ +// x-notification-center.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XNotificationCenter as XNotificationCenterElement } from "@vanelsas/baredom/x-notification-center"; +import { init } from "@vanelsas/baredom/x-notification-center"; + +init(); + +export interface XNotificationCenterProps { + position?: string; + max?: number; + onPush?: (e: CustomEvent<{ id: string; count: number }>) => void; + onDismiss?: (e: CustomEvent<{ id: string; type: string; reason: string; text: string; count: number }>) => void; + onEmpty?: (e: CustomEvent<{}>) => void; + ref?: XNotificationCenterElement | ((el: XNotificationCenterElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XNotificationCenter(props: XNotificationCenterProps): JSX.Element { + const [local, others] = splitProps(props, ["onPush", "onDismiss", "onEmpty", "ref", "children"]); + let el!: XNotificationCenterElement; + + const setRef = (r: XNotificationCenterElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onPush?.(e as CustomEvent<{ id: string; count: number }>); + el.addEventListener("x-notification-center-push", handler); + onCleanup(() => el.removeEventListener("x-notification-center-push", handler)); + } + { + const handler = (e: Event) => local.onDismiss?.(e as CustomEvent<{ id: string; type: string; reason: string; text: string; count: number }>); + el.addEventListener("x-notification-center-dismiss", handler); + onCleanup(() => el.removeEventListener("x-notification-center-dismiss", handler)); + } + { + const handler = (e: Event) => local.onEmpty?.(e as CustomEvent<{}>); + el.addEventListener("x-notification-center-empty", handler); + onCleanup(() => el.removeEventListener("x-notification-center-empty", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-organic-divider.tsx b/adapters/solid/src/x-organic-divider.tsx new file mode 100644 index 0000000..b6b369e --- /dev/null +++ b/adapters/solid/src/x-organic-divider.tsx @@ -0,0 +1,39 @@ +// x-organic-divider.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XOrganicDivider as XOrganicDividerElement } from "@vanelsas/baredom/x-organic-divider"; +import { init } from "@vanelsas/baredom/x-organic-divider"; + +init(); + +export interface XOrganicDividerProps { + shape?: string; + layers?: string; + height?: string; + flip?: boolean; + mirror?: boolean; + animation?: string; + path?: string; + ref?: XOrganicDividerElement | ((el: XOrganicDividerElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XOrganicDivider(props: XOrganicDividerProps): JSX.Element { + const [local, others] = splitProps(props, ["ref", "children"]); + let el!: XOrganicDividerElement; + + const setRef = (r: XOrganicDividerElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-organic-progress.tsx b/adapters/solid/src/x-organic-progress.tsx new file mode 100644 index 0000000..e911686 --- /dev/null +++ b/adapters/solid/src/x-organic-progress.tsx @@ -0,0 +1,55 @@ +// x-organic-progress.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XOrganicProgress as XOrganicProgressElement } from "@vanelsas/baredom/x-organic-progress"; +import { init } from "@vanelsas/baredom/x-organic-progress"; + +init(); + +export interface XOrganicProgressProps { + progress?: string; + variant?: string; + color?: string; + bloom?: boolean; + density?: string; + seed?: number; + label?: string; + onComplete?: (e: CustomEvent<{ progress: number }>) => void; + onBloomEnd?: (e: CustomEvent<{ progress: number }>) => void; + ref?: XOrganicProgressElement | ((el: XOrganicProgressElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XOrganicProgress(props: XOrganicProgressProps): JSX.Element { + const [local, others] = splitProps(props, ["onComplete", "onBloomEnd", "ref", "children"]); + let el!: XOrganicProgressElement; + + const setRef = (r: XOrganicProgressElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onComplete?.(e as CustomEvent<{ progress: number }>); + el.addEventListener("x-organic-progress-complete", handler); + onCleanup(() => el.removeEventListener("x-organic-progress-complete", handler)); + } + { + const handler = (e: Event) => local.onBloomEnd?.(e as CustomEvent<{ progress: number }>); + el.addEventListener("x-organic-progress-bloom-end", handler); + onCleanup(() => el.removeEventListener("x-organic-progress-bloom-end", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-organic-shape.tsx b/adapters/solid/src/x-organic-shape.tsx new file mode 100644 index 0000000..1f97bf9 --- /dev/null +++ b/adapters/solid/src/x-organic-shape.tsx @@ -0,0 +1,38 @@ +// x-organic-shape.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XOrganicShape as XOrganicShapeElement } from "@vanelsas/baredom/x-organic-shape"; +import { init } from "@vanelsas/baredom/x-organic-shape"; + +init(); + +export interface XOrganicShapeProps { + shape?: string; + path?: string; + animation?: string; + ratio?: string; + width?: string; + height?: string; + ref?: XOrganicShapeElement | ((el: XOrganicShapeElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XOrganicShape(props: XOrganicShapeProps): JSX.Element { + const [local, others] = splitProps(props, ["ref", "children"]); + let el!: XOrganicShapeElement; + + const setRef = (r: XOrganicShapeElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-otp-input.tsx b/adapters/solid/src/x-otp-input.tsx new file mode 100644 index 0000000..0ed76d8 --- /dev/null +++ b/adapters/solid/src/x-otp-input.tsx @@ -0,0 +1,66 @@ +// x-otp-input.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XOtpInput as XOtpInputElement } from "@vanelsas/baredom/x-otp-input"; +import { init } from "@vanelsas/baredom/x-otp-input"; + +init(); + +export interface XOtpInputProps { + mask?: boolean; + placeholder?: string; + disabled?: boolean; + name?: string; + value?: string; + readonly?: boolean; + type?: string; + label?: string; + autofocus?: boolean; + length?: number; + error?: string; + required?: boolean; + onInput?: (e: CustomEvent<{ name: string; value: string; complete: boolean }>) => void; + onChange?: (e: CustomEvent<{ name: string; value: string; complete: boolean }>) => void; + onComplete?: (e: CustomEvent<{ name: string; value: string }>) => void; + ref?: XOtpInputElement | ((el: XOtpInputElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XOtpInput(props: XOtpInputProps): JSX.Element { + const [local, others] = splitProps(props, ["onInput", "onChange", "onComplete", "ref", "children"]); + let el!: XOtpInputElement; + + const setRef = (r: XOtpInputElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onInput?.(e as CustomEvent<{ name: string; value: string; complete: boolean }>); + el.addEventListener("x-otp-input-input", handler); + onCleanup(() => el.removeEventListener("x-otp-input-input", handler)); + } + { + const handler = (e: Event) => local.onChange?.(e as CustomEvent<{ name: string; value: string; complete: boolean }>); + el.addEventListener("x-otp-input-change", handler); + onCleanup(() => el.removeEventListener("x-otp-input-change", handler)); + } + { + const handler = (e: Event) => local.onComplete?.(e as CustomEvent<{ name: string; value: string }>); + el.addEventListener("x-otp-input-complete", handler); + onCleanup(() => el.removeEventListener("x-otp-input-complete", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-pagination.tsx b/adapters/solid/src/x-pagination.tsx new file mode 100644 index 0000000..3c9177c --- /dev/null +++ b/adapters/solid/src/x-pagination.tsx @@ -0,0 +1,71 @@ +// x-pagination.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup, createEffect } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XPagination as XPaginationElement } from "@vanelsas/baredom/x-pagination"; +import { init } from "@vanelsas/baredom/x-pagination"; + +init(); + +export interface XPaginationProps { + page?: number; + totalPages?: number; + siblingCount?: number; + boundaryCount?: number; + size?: string; + disabled?: boolean; + label?: string; + defaultPage?: number; + onPageChangeRequest?: (e: CustomEvent<{ page: number; previousPage: number }>) => void; + onPageChange?: (e: CustomEvent<{ page: number }>) => void; + ref?: XPaginationElement | ((el: XPaginationElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XPagination(props: XPaginationProps): JSX.Element { + const [local, others] = splitProps(props, ["page", "defaultPage", "onPageChangeRequest", "onPageChange", "ref", "children"]); + let el!: XPaginationElement; + + const setRef = (r: XPaginationElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el || local.page !== undefined || local.defaultPage === undefined) return; + el.setAttribute("page", String(local.defaultPage)); + }); + + createEffect(() => { + if (!el) return; + const v = local.page; + if (v === undefined) return; + el.setAttribute("page", String(v)); + }); + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => { + if (local.page !== undefined) e.preventDefault(); + local.onPageChangeRequest?.(e as CustomEvent<{ page: number; previousPage: number }>); + }; + el.addEventListener("page-change-request", handler); + onCleanup(() => el.removeEventListener("page-change-request", handler)); + } + { + const handler = (e: Event) => local.onPageChange?.(e as CustomEvent<{ page: number }>); + el.addEventListener("page-change", handler); + onCleanup(() => el.removeEventListener("page-change", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-particle-button.tsx b/adapters/solid/src/x-particle-button.tsx new file mode 100644 index 0000000..bd39c50 --- /dev/null +++ b/adapters/solid/src/x-particle-button.tsx @@ -0,0 +1,87 @@ +// x-particle-button.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XParticleButton as XParticleButtonElement } from "@vanelsas/baredom/x-particle-button"; +import { init } from "@vanelsas/baredom/x-particle-button"; + +init(); + +export interface XParticleButtonProps { + disabled?: boolean; + loading?: boolean; + pressed?: boolean; + onPress?: (e: CustomEvent<{ source: string }>) => void; + onPressStart?: (e: CustomEvent<{ source: string }>) => void; + onPressEnd?: (e: CustomEvent<{ source: string }>) => void; + onHoverStart?: (e: CustomEvent<{}>) => void; + onHoverEnd?: (e: CustomEvent<{}>) => void; + onFocusVisible?: (e: CustomEvent<{}>) => void; + onBurst?: (e: CustomEvent<{ mode: string; pressX: number; pressY: number }>) => void; + onReform?: (e: CustomEvent<{ mode: string; duration: number }>) => void; + ref?: XParticleButtonElement | ((el: XParticleButtonElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XParticleButton(props: XParticleButtonProps): JSX.Element { + const [local, others] = splitProps(props, ["onPress", "onPressStart", "onPressEnd", "onHoverStart", "onHoverEnd", "onFocusVisible", "onBurst", "onReform", "ref", "children"]); + let el!: XParticleButtonElement; + + const setRef = (r: XParticleButtonElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onPress?.(e as CustomEvent<{ source: string }>); + el.addEventListener("press", handler); + onCleanup(() => el.removeEventListener("press", handler)); + } + { + const handler = (e: Event) => local.onPressStart?.(e as CustomEvent<{ source: string }>); + el.addEventListener("press-start", handler); + onCleanup(() => el.removeEventListener("press-start", handler)); + } + { + const handler = (e: Event) => local.onPressEnd?.(e as CustomEvent<{ source: string }>); + el.addEventListener("press-end", handler); + onCleanup(() => el.removeEventListener("press-end", handler)); + } + { + const handler = (e: Event) => local.onHoverStart?.(e as CustomEvent<{}>); + el.addEventListener("hover-start", handler); + onCleanup(() => el.removeEventListener("hover-start", handler)); + } + { + const handler = (e: Event) => local.onHoverEnd?.(e as CustomEvent<{}>); + el.addEventListener("hover-end", handler); + onCleanup(() => el.removeEventListener("hover-end", handler)); + } + { + const handler = (e: Event) => local.onFocusVisible?.(e as CustomEvent<{}>); + el.addEventListener("focus-visible", handler); + onCleanup(() => el.removeEventListener("focus-visible", handler)); + } + { + const handler = (e: Event) => local.onBurst?.(e as CustomEvent<{ mode: string; pressX: number; pressY: number }>); + el.addEventListener("burst", handler); + onCleanup(() => el.removeEventListener("burst", handler)); + } + { + const handler = (e: Event) => local.onReform?.(e as CustomEvent<{ mode: string; duration: number }>); + el.addEventListener("reform", handler); + onCleanup(() => el.removeEventListener("reform", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-popover.tsx b/adapters/solid/src/x-popover.tsx new file mode 100644 index 0000000..30abfdd --- /dev/null +++ b/adapters/solid/src/x-popover.tsx @@ -0,0 +1,55 @@ +// x-popover.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XPopover as XPopoverElement } from "@vanelsas/baredom/x-popover"; +import { init } from "@vanelsas/baredom/x-popover"; + +init(); + +export interface XPopoverProps { + open?: boolean; + placement?: string; + heading?: string; + closeLabel?: string; + noClose?: boolean; + disabled?: boolean; + portal?: boolean; + onToggle?: (e: CustomEvent<{ open: boolean; source: string }>) => void; + onChange?: (e: CustomEvent<{ open: boolean }>) => void; + ref?: XPopoverElement | ((el: XPopoverElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XPopover(props: XPopoverProps): JSX.Element { + const [local, others] = splitProps(props, ["onToggle", "onChange", "ref", "children"]); + let el!: XPopoverElement; + + const setRef = (r: XPopoverElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onToggle?.(e as CustomEvent<{ open: boolean; source: string }>); + el.addEventListener("x-popover-toggle", handler); + onCleanup(() => el.removeEventListener("x-popover-toggle", handler)); + } + { + const handler = (e: Event) => local.onChange?.(e as CustomEvent<{ open: boolean }>); + el.addEventListener("x-popover-change", handler); + onCleanup(() => el.removeEventListener("x-popover-change", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-progress-circle.tsx b/adapters/solid/src/x-progress-circle.tsx new file mode 100644 index 0000000..428691e --- /dev/null +++ b/adapters/solid/src/x-progress-circle.tsx @@ -0,0 +1,49 @@ +// x-progress-circle.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XProgressCircle as XProgressCircleElement } from "@vanelsas/baredom/x-progress-circle"; +import { init } from "@vanelsas/baredom/x-progress-circle"; + +init(); + +export interface XProgressCircleProps { + value?: string; + max?: string; + variant?: string; + size?: string; + label?: string; + indeterminate?: boolean; + showValue?: boolean; + onComplete?: (e: CustomEvent<{ value: number; max: number }>) => void; + ref?: XProgressCircleElement | ((el: XProgressCircleElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XProgressCircle(props: XProgressCircleProps): JSX.Element { + const [local, others] = splitProps(props, ["onComplete", "ref", "children"]); + let el!: XProgressCircleElement; + + const setRef = (r: XProgressCircleElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onComplete?.(e as CustomEvent<{ value: number; max: number }>); + el.addEventListener("x-progress-circle-complete", handler); + onCleanup(() => el.removeEventListener("x-progress-circle-complete", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-progress.tsx b/adapters/solid/src/x-progress.tsx new file mode 100644 index 0000000..10c0406 --- /dev/null +++ b/adapters/solid/src/x-progress.tsx @@ -0,0 +1,49 @@ +// x-progress.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XProgress as XProgressElement } from "@vanelsas/baredom/x-progress"; +import { init } from "@vanelsas/baredom/x-progress"; + +init(); + +export interface XProgressProps { + value?: string; + max?: string; + variant?: string; + size?: string; + label?: string; + indeterminate?: boolean; + showValue?: boolean; + onComplete?: (e: CustomEvent<{ value: number; max: number }>) => void; + ref?: XProgressElement | ((el: XProgressElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XProgress(props: XProgressProps): JSX.Element { + const [local, others] = splitProps(props, ["onComplete", "ref", "children"]); + let el!: XProgressElement; + + const setRef = (r: XProgressElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onComplete?.(e as CustomEvent<{ value: number; max: number }>); + el.addEventListener("x-progress-complete", handler); + onCleanup(() => el.removeEventListener("x-progress-complete", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-proximity-list.tsx b/adapters/solid/src/x-proximity-list.tsx new file mode 100644 index 0000000..8757c90 --- /dev/null +++ b/adapters/solid/src/x-proximity-list.tsx @@ -0,0 +1,48 @@ +// x-proximity-list.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XProximityList as XProximityListElement } from "@vanelsas/baredom/x-proximity-list"; +import { init } from "@vanelsas/baredom/x-proximity-list"; + +init(); + +export interface XProximityListProps { + direction?: string; + radius?: number; + maxScale?: number; + lift?: number; + gap?: number; + disabled?: boolean; + onSelect?: (e: CustomEvent<{ index: number; item: any; source: string }>) => void; + ref?: XProximityListElement | ((el: XProximityListElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XProximityList(props: XProximityListProps): JSX.Element { + const [local, others] = splitProps(props, ["onSelect", "ref", "children"]); + let el!: XProximityListElement; + + const setRef = (r: XProximityListElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onSelect?.(e as CustomEvent<{ index: number; item: any; source: string }>); + el.addEventListener("x-proximity-list-select", handler); + onCleanup(() => el.removeEventListener("x-proximity-list-select", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-radio.tsx b/adapters/solid/src/x-radio.tsx new file mode 100644 index 0000000..d380fc9 --- /dev/null +++ b/adapters/solid/src/x-radio.tsx @@ -0,0 +1,72 @@ +// x-radio.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup, createEffect } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XRadio as XRadioElement } from "@vanelsas/baredom/x-radio"; +import { init } from "@vanelsas/baredom/x-radio"; + +init(); + +export interface XRadioProps { + checked?: boolean; + disabled?: boolean; + readOnly?: boolean; + required?: boolean; + name?: string; + value?: string; + defaultChecked?: boolean; + onChangeRequest?: (e: CustomEvent<{ value: string; previousChecked: boolean; nextChecked: boolean }>) => void; + onChange?: (e: CustomEvent<{ value: string; checked: boolean }>) => void; + ref?: XRadioElement | ((el: XRadioElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XRadio(props: XRadioProps): JSX.Element { + const [local, others] = splitProps(props, ["checked", "defaultChecked", "onChangeRequest", "onChange", "ref", "children"]); + let el!: XRadioElement; + + const setRef = (r: XRadioElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el || local.checked !== undefined || local.defaultChecked === undefined) return; + if (local.defaultChecked) el.setAttribute("checked", ""); + else el.removeAttribute("checked"); + }); + + createEffect(() => { + if (!el) return; + const v = local.checked; + if (v === undefined) return; + if (v) el.setAttribute("checked", ""); + else el.removeAttribute("checked"); + }); + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => { + if (local.checked !== undefined) e.preventDefault(); + local.onChangeRequest?.(e as CustomEvent<{ value: string; previousChecked: boolean; nextChecked: boolean }>); + }; + el.addEventListener("x-radio-change-request", handler); + onCleanup(() => el.removeEventListener("x-radio-change-request", handler)); + } + { + const handler = (e: Event) => local.onChange?.(e as CustomEvent<{ value: string; checked: boolean }>); + el.addEventListener("x-radio-change", handler); + onCleanup(() => el.removeEventListener("x-radio-change", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-range-slider.tsx b/adapters/solid/src/x-range-slider.tsx new file mode 100644 index 0000000..3840a9e --- /dev/null +++ b/adapters/solid/src/x-range-slider.tsx @@ -0,0 +1,66 @@ +// x-range-slider.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XRangeSlider as XRangeSliderElement } from "@vanelsas/baredom/x-range-slider"; +import { init } from "@vanelsas/baredom/x-range-slider"; + +init(); + +export interface XRangeSliderProps { + min?: string; + disabled?: boolean; + showValue?: boolean; + name?: string; + start?: string; + minGap?: string; + size?: string; + readOnly?: boolean; + max?: string; + label?: string; + end?: string; + step?: string; + onChangeRequest?: (e: CustomEvent<{ start: number; end: number; previousStart: number; previousEnd: number; min: number; max: number }>) => void; + onInput?: (e: CustomEvent<{ start: number; end: number; min: number; max: number }>) => void; + onChange?: (e: CustomEvent<{ start: number; end: number; min: number; max: number }>) => void; + ref?: XRangeSliderElement | ((el: XRangeSliderElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XRangeSlider(props: XRangeSliderProps): JSX.Element { + const [local, others] = splitProps(props, ["onChangeRequest", "onInput", "onChange", "ref", "children"]); + let el!: XRangeSliderElement; + + const setRef = (r: XRangeSliderElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onChangeRequest?.(e as CustomEvent<{ start: number; end: number; previousStart: number; previousEnd: number; min: number; max: number }>); + el.addEventListener("x-range-slider-change-request", handler); + onCleanup(() => el.removeEventListener("x-range-slider-change-request", handler)); + } + { + const handler = (e: Event) => local.onInput?.(e as CustomEvent<{ start: number; end: number; min: number; max: number }>); + el.addEventListener("x-range-slider-input", handler); + onCleanup(() => el.removeEventListener("x-range-slider-input", handler)); + } + { + const handler = (e: Event) => local.onChange?.(e as CustomEvent<{ start: number; end: number; min: number; max: number }>); + el.addEventListener("x-range-slider-change", handler); + onCleanup(() => el.removeEventListener("x-range-slider-change", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-rating.tsx b/adapters/solid/src/x-rating.tsx new file mode 100644 index 0000000..7e34038 --- /dev/null +++ b/adapters/solid/src/x-rating.tsx @@ -0,0 +1,64 @@ +// x-rating.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XRating as XRatingElement } from "@vanelsas/baredom/x-rating"; +import { init } from "@vanelsas/baredom/x-rating"; + +init(); + +export interface XRatingProps { + allowClear?: boolean; + disabled?: boolean; + name?: string; + value?: string; + precision?: string; + size?: string; + readOnly?: boolean; + max?: string; + label?: string; + shape?: string; + onChangeRequest?: (e: CustomEvent<{ value: number; previousValue: number; max: number }>) => void; + onChange?: (e: CustomEvent<{ value: number; max: number }>) => void; + onHover?: (e: CustomEvent<{ value: number; max: number }>) => void; + ref?: XRatingElement | ((el: XRatingElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XRating(props: XRatingProps): JSX.Element { + const [local, others] = splitProps(props, ["onChangeRequest", "onChange", "onHover", "ref", "children"]); + let el!: XRatingElement; + + const setRef = (r: XRatingElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onChangeRequest?.(e as CustomEvent<{ value: number; previousValue: number; max: number }>); + el.addEventListener("x-rating-change-request", handler); + onCleanup(() => el.removeEventListener("x-rating-change-request", handler)); + } + { + const handler = (e: Event) => local.onChange?.(e as CustomEvent<{ value: number; max: number }>); + el.addEventListener("x-rating-change", handler); + onCleanup(() => el.removeEventListener("x-rating-change", handler)); + } + { + const handler = (e: Event) => local.onHover?.(e as CustomEvent<{ value: number; max: number }>); + el.addEventListener("x-rating-hover", handler); + onCleanup(() => el.removeEventListener("x-rating-hover", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-ripple-effect.tsx b/adapters/solid/src/x-ripple-effect.tsx new file mode 100644 index 0000000..c1ea3da --- /dev/null +++ b/adapters/solid/src/x-ripple-effect.tsx @@ -0,0 +1,52 @@ +// x-ripple-effect.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XRippleEffect as XRippleEffectElement } from "@vanelsas/baredom/x-ripple-effect"; +import { init } from "@vanelsas/baredom/x-ripple-effect"; + +init(); + +export interface XRippleEffectProps { + intensity?: number; + duration?: number; + frequency?: number; + disabled?: boolean; + onStart?: (e: CustomEvent<{ x: number; y: number }>) => void; + onEnd?: (e: CustomEvent<{ x: number; y: number }>) => void; + ref?: XRippleEffectElement | ((el: XRippleEffectElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XRippleEffect(props: XRippleEffectProps): JSX.Element { + const [local, others] = splitProps(props, ["onStart", "onEnd", "ref", "children"]); + let el!: XRippleEffectElement; + + const setRef = (r: XRippleEffectElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onStart?.(e as CustomEvent<{ x: number; y: number }>); + el.addEventListener("x-ripple-effect-start", handler); + onCleanup(() => el.removeEventListener("x-ripple-effect-start", handler)); + } + { + const handler = (e: Event) => local.onEnd?.(e as CustomEvent<{ x: number; y: number }>); + el.addEventListener("x-ripple-effect-end", handler); + onCleanup(() => el.removeEventListener("x-ripple-effect-end", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-scroll-parallax.tsx b/adapters/solid/src/x-scroll-parallax.tsx new file mode 100644 index 0000000..749aeb5 --- /dev/null +++ b/adapters/solid/src/x-scroll-parallax.tsx @@ -0,0 +1,59 @@ +// x-scroll-parallax.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XScrollParallax as XScrollParallaxElement } from "@vanelsas/baredom/x-scroll-parallax"; +import { init } from "@vanelsas/baredom/x-scroll-parallax"; + +init(); + +export interface XScrollParallaxProps { + direction?: string; + source?: string; + easing?: string; + disabled?: boolean; + label?: string; + onEnter?: (e: CustomEvent<{ progress: number }>) => void; + onLeave?: (e: CustomEvent<{ progress: number }>) => void; + onProgress?: (e: CustomEvent<{ progress: number }>) => void; + ref?: XScrollParallaxElement | ((el: XScrollParallaxElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XScrollParallax(props: XScrollParallaxProps): JSX.Element { + const [local, others] = splitProps(props, ["onEnter", "onLeave", "onProgress", "ref", "children"]); + let el!: XScrollParallaxElement; + + const setRef = (r: XScrollParallaxElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onEnter?.(e as CustomEvent<{ progress: number }>); + el.addEventListener("x-scroll-parallax-enter", handler); + onCleanup(() => el.removeEventListener("x-scroll-parallax-enter", handler)); + } + { + const handler = (e: Event) => local.onLeave?.(e as CustomEvent<{ progress: number }>); + el.addEventListener("x-scroll-parallax-leave", handler); + onCleanup(() => el.removeEventListener("x-scroll-parallax-leave", handler)); + } + { + const handler = (e: Event) => local.onProgress?.(e as CustomEvent<{ progress: number }>); + el.addEventListener("x-scroll-parallax-progress", handler); + onCleanup(() => el.removeEventListener("x-scroll-parallax-progress", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-scroll-stack.tsx b/adapters/solid/src/x-scroll-stack.tsx new file mode 100644 index 0000000..b069e9c --- /dev/null +++ b/adapters/solid/src/x-scroll-stack.tsx @@ -0,0 +1,53 @@ +// x-scroll-stack.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XScrollStack as XScrollStackElement } from "@vanelsas/baredom/x-scroll-stack"; +import { init } from "@vanelsas/baredom/x-scroll-stack"; + +init(); + +export interface XScrollStackProps { + peek?: number; + rotation?: number; + scrollDistance?: number; + align?: string; + disabled?: boolean; + onChange?: (e: CustomEvent<{ stackedCount: number; totalCount: number; progress: number }>) => void; + onProgress?: (e: CustomEvent<{ progress: number; stackedCount: number; totalCount: number }>) => void; + ref?: XScrollStackElement | ((el: XScrollStackElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XScrollStack(props: XScrollStackProps): JSX.Element { + const [local, others] = splitProps(props, ["onChange", "onProgress", "ref", "children"]); + let el!: XScrollStackElement; + + const setRef = (r: XScrollStackElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onChange?.(e as CustomEvent<{ stackedCount: number; totalCount: number; progress: number }>); + el.addEventListener("x-scroll-stack-change", handler); + onCleanup(() => el.removeEventListener("x-scroll-stack-change", handler)); + } + { + const handler = (e: Event) => local.onProgress?.(e as CustomEvent<{ progress: number; stackedCount: number; totalCount: number }>); + el.addEventListener("x-scroll-stack-progress", handler); + onCleanup(() => el.removeEventListener("x-scroll-stack-progress", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-scroll-story.tsx b/adapters/solid/src/x-scroll-story.tsx new file mode 100644 index 0000000..71b4cd4 --- /dev/null +++ b/adapters/solid/src/x-scroll-story.tsx @@ -0,0 +1,93 @@ +// x-scroll-story.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XScrollStory as XScrollStoryElement } from "@vanelsas/baredom/x-scroll-story"; +import { init } from "@vanelsas/baredom/x-scroll-story"; + +init(); + +export interface XScrollStoryProps { + autoplayLoop?: boolean; + autoplaySpeed?: number; + autoplayIndicator?: boolean; + disabled?: boolean; + layout?: string; + threshold?: number; + split?: number; + label?: string; + autoplay?: boolean; + onStepChange?: (e: CustomEvent<{ index: number; id: string; previousIndex: number; previousId: string }>) => void; + onStepEnter?: (e: CustomEvent<{ index: number; id: string; progress: number }>) => void; + onStepLeave?: (e: CustomEvent<{ index: number; id: string; progress: number }>) => void; + onProgress?: (e: CustomEvent<{ progress: number; activeIndex: number; activeId: string }>) => void; + onEnter?: (e: CustomEvent<{ progress: number }>) => void; + onLeave?: (e: CustomEvent<{ progress: number }>) => void; + onAutoplayPause?: (e: CustomEvent<{ progress: number; activeIndex: number; activeId: string }>) => void; + onAutoplayResume?: (e: CustomEvent<{ progress: number; activeIndex: number; activeId: string }>) => void; + ref?: XScrollStoryElement | ((el: XScrollStoryElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XScrollStory(props: XScrollStoryProps): JSX.Element { + const [local, others] = splitProps(props, ["onStepChange", "onStepEnter", "onStepLeave", "onProgress", "onEnter", "onLeave", "onAutoplayPause", "onAutoplayResume", "ref", "children"]); + let el!: XScrollStoryElement; + + const setRef = (r: XScrollStoryElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onStepChange?.(e as CustomEvent<{ index: number; id: string; previousIndex: number; previousId: string }>); + el.addEventListener("x-scroll-story-step-change", handler); + onCleanup(() => el.removeEventListener("x-scroll-story-step-change", handler)); + } + { + const handler = (e: Event) => local.onStepEnter?.(e as CustomEvent<{ index: number; id: string; progress: number }>); + el.addEventListener("x-scroll-story-step-enter", handler); + onCleanup(() => el.removeEventListener("x-scroll-story-step-enter", handler)); + } + { + const handler = (e: Event) => local.onStepLeave?.(e as CustomEvent<{ index: number; id: string; progress: number }>); + el.addEventListener("x-scroll-story-step-leave", handler); + onCleanup(() => el.removeEventListener("x-scroll-story-step-leave", handler)); + } + { + const handler = (e: Event) => local.onProgress?.(e as CustomEvent<{ progress: number; activeIndex: number; activeId: string }>); + el.addEventListener("x-scroll-story-progress", handler); + onCleanup(() => el.removeEventListener("x-scroll-story-progress", handler)); + } + { + const handler = (e: Event) => local.onEnter?.(e as CustomEvent<{ progress: number }>); + el.addEventListener("x-scroll-story-enter", handler); + onCleanup(() => el.removeEventListener("x-scroll-story-enter", handler)); + } + { + const handler = (e: Event) => local.onLeave?.(e as CustomEvent<{ progress: number }>); + el.addEventListener("x-scroll-story-leave", handler); + onCleanup(() => el.removeEventListener("x-scroll-story-leave", handler)); + } + { + const handler = (e: Event) => local.onAutoplayPause?.(e as CustomEvent<{ progress: number; activeIndex: number; activeId: string }>); + el.addEventListener("x-scroll-story-autoplay-pause", handler); + onCleanup(() => el.removeEventListener("x-scroll-story-autoplay-pause", handler)); + } + { + const handler = (e: Event) => local.onAutoplayResume?.(e as CustomEvent<{ progress: number; activeIndex: number; activeId: string }>); + el.addEventListener("x-scroll-story-autoplay-resume", handler); + onCleanup(() => el.removeEventListener("x-scroll-story-autoplay-resume", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-scroll-timeline.tsx b/adapters/solid/src/x-scroll-timeline.tsx new file mode 100644 index 0000000..bdc6a7c --- /dev/null +++ b/adapters/solid/src/x-scroll-timeline.tsx @@ -0,0 +1,95 @@ +// x-scroll-timeline.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XScrollTimeline as XScrollTimelineElement } from "@vanelsas/baredom/x-scroll-timeline"; +import { init } from "@vanelsas/baredom/x-scroll-timeline"; + +init(); + +export interface XScrollTimelineProps { + autoplayLoop?: boolean; + autoplaySpeed?: number; + autoplayIndicator?: boolean; + disabled?: boolean; + layout?: string; + marker?: string; + threshold?: number; + label?: string; + autoplay?: boolean; + noProgress?: boolean; + track?: string; + onEntryChange?: (e: CustomEvent<{ index: number; id: string; previousIndex: number; previousId: string }>) => void; + onEntryEnter?: (e: CustomEvent<{ index: number; id: string; progress: number }>) => void; + onEntryLeave?: (e: CustomEvent<{ index: number; id: string; progress: number }>) => void; + onProgress?: (e: CustomEvent<{ progress: number; activeIndex: number; activeId: string }>) => void; + onEnter?: (e: CustomEvent<{ progress: number }>) => void; + onLeave?: (e: CustomEvent<{ progress: number }>) => void; + onAutoplayPause?: (e: CustomEvent<{ progress: number; activeIndex: number; activeId: string }>) => void; + onAutoplayResume?: (e: CustomEvent<{ progress: number; activeIndex: number; activeId: string }>) => void; + ref?: XScrollTimelineElement | ((el: XScrollTimelineElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XScrollTimeline(props: XScrollTimelineProps): JSX.Element { + const [local, others] = splitProps(props, ["onEntryChange", "onEntryEnter", "onEntryLeave", "onProgress", "onEnter", "onLeave", "onAutoplayPause", "onAutoplayResume", "ref", "children"]); + let el!: XScrollTimelineElement; + + const setRef = (r: XScrollTimelineElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onEntryChange?.(e as CustomEvent<{ index: number; id: string; previousIndex: number; previousId: string }>); + el.addEventListener("x-scroll-timeline-entry-change", handler); + onCleanup(() => el.removeEventListener("x-scroll-timeline-entry-change", handler)); + } + { + const handler = (e: Event) => local.onEntryEnter?.(e as CustomEvent<{ index: number; id: string; progress: number }>); + el.addEventListener("x-scroll-timeline-entry-enter", handler); + onCleanup(() => el.removeEventListener("x-scroll-timeline-entry-enter", handler)); + } + { + const handler = (e: Event) => local.onEntryLeave?.(e as CustomEvent<{ index: number; id: string; progress: number }>); + el.addEventListener("x-scroll-timeline-entry-leave", handler); + onCleanup(() => el.removeEventListener("x-scroll-timeline-entry-leave", handler)); + } + { + const handler = (e: Event) => local.onProgress?.(e as CustomEvent<{ progress: number; activeIndex: number; activeId: string }>); + el.addEventListener("x-scroll-timeline-progress", handler); + onCleanup(() => el.removeEventListener("x-scroll-timeline-progress", handler)); + } + { + const handler = (e: Event) => local.onEnter?.(e as CustomEvent<{ progress: number }>); + el.addEventListener("x-scroll-timeline-enter", handler); + onCleanup(() => el.removeEventListener("x-scroll-timeline-enter", handler)); + } + { + const handler = (e: Event) => local.onLeave?.(e as CustomEvent<{ progress: number }>); + el.addEventListener("x-scroll-timeline-leave", handler); + onCleanup(() => el.removeEventListener("x-scroll-timeline-leave", handler)); + } + { + const handler = (e: Event) => local.onAutoplayPause?.(e as CustomEvent<{ progress: number; activeIndex: number; activeId: string }>); + el.addEventListener("x-scroll-timeline-autoplay-pause", handler); + onCleanup(() => el.removeEventListener("x-scroll-timeline-autoplay-pause", handler)); + } + { + const handler = (e: Event) => local.onAutoplayResume?.(e as CustomEvent<{ progress: number; activeIndex: number; activeId: string }>); + el.addEventListener("x-scroll-timeline-autoplay-resume", handler); + onCleanup(() => el.removeEventListener("x-scroll-timeline-autoplay-resume", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-scroll.tsx b/adapters/solid/src/x-scroll.tsx new file mode 100644 index 0000000..3b507e7 --- /dev/null +++ b/adapters/solid/src/x-scroll.tsx @@ -0,0 +1,71 @@ +// x-scroll.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XScroll as XScrollElement } from "@vanelsas/baredom/x-scroll"; +import { init } from "@vanelsas/baredom/x-scroll"; + +init(); + +export interface XScrollProps { + disabled?: boolean; + showIndicators?: boolean; + snap?: string; + activeIndex?: number; + mode?: string; + showControls?: boolean; + loop?: boolean; + label?: string; + gap?: number; + autoPlay?: boolean; + interval?: number; + onChange?: (e: CustomEvent<{ activeIndex: number; previousIndex: number }>) => void; + onStart?: (e: CustomEvent<{ direction: string; activeIndex: number }>) => void; + onEnd?: (e: CustomEvent<{ activeIndex: number }>) => void; + onLoop?: (e: CustomEvent<{ direction: string }>) => void; + ref?: XScrollElement | ((el: XScrollElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XScroll(props: XScrollProps): JSX.Element { + const [local, others] = splitProps(props, ["onChange", "onStart", "onEnd", "onLoop", "ref", "children"]); + let el!: XScrollElement; + + const setRef = (r: XScrollElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onChange?.(e as CustomEvent<{ activeIndex: number; previousIndex: number }>); + el.addEventListener("x-scroll-change", handler); + onCleanup(() => el.removeEventListener("x-scroll-change", handler)); + } + { + const handler = (e: Event) => local.onStart?.(e as CustomEvent<{ direction: string; activeIndex: number }>); + el.addEventListener("x-scroll-start", handler); + onCleanup(() => el.removeEventListener("x-scroll-start", handler)); + } + { + const handler = (e: Event) => local.onEnd?.(e as CustomEvent<{ activeIndex: number }>); + el.addEventListener("x-scroll-end", handler); + onCleanup(() => el.removeEventListener("x-scroll-end", handler)); + } + { + const handler = (e: Event) => local.onLoop?.(e as CustomEvent<{ direction: string }>); + el.addEventListener("x-scroll-loop", handler); + onCleanup(() => el.removeEventListener("x-scroll-loop", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-search-field.tsx b/adapters/solid/src/x-search-field.tsx new file mode 100644 index 0000000..0d6ef2c --- /dev/null +++ b/adapters/solid/src/x-search-field.tsx @@ -0,0 +1,67 @@ +// x-search-field.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XSearchField as XSearchFieldElement } from "@vanelsas/baredom/x-search-field"; +import { init } from "@vanelsas/baredom/x-search-field"; + +init(); + +export interface XSearchFieldProps { + value?: string; + name?: string; + placeholder?: string; + label?: string; + autocomplete?: string; + disabled?: boolean; + required?: boolean; + onInput?: (e: CustomEvent<{ name: string; value: string }>) => void; + onChange?: (e: CustomEvent<{ name: string; value: string }>) => void; + onSearch?: (e: CustomEvent<{ name: string; value: string }>) => void; + onClear?: (e: CustomEvent<{ name: string }>) => void; + ref?: XSearchFieldElement | ((el: XSearchFieldElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XSearchField(props: XSearchFieldProps): JSX.Element { + const [local, others] = splitProps(props, ["onInput", "onChange", "onSearch", "onClear", "ref", "children"]); + let el!: XSearchFieldElement; + + const setRef = (r: XSearchFieldElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onInput?.(e as CustomEvent<{ name: string; value: string }>); + el.addEventListener("x-search-field-input", handler); + onCleanup(() => el.removeEventListener("x-search-field-input", handler)); + } + { + const handler = (e: Event) => local.onChange?.(e as CustomEvent<{ name: string; value: string }>); + el.addEventListener("x-search-field-change", handler); + onCleanup(() => el.removeEventListener("x-search-field-change", handler)); + } + { + const handler = (e: Event) => local.onSearch?.(e as CustomEvent<{ name: string; value: string }>); + el.addEventListener("x-search-field-search", handler); + onCleanup(() => el.removeEventListener("x-search-field-search", handler)); + } + { + const handler = (e: Event) => local.onClear?.(e as CustomEvent<{ name: string }>); + el.addEventListener("x-search-field-clear", handler); + onCleanup(() => el.removeEventListener("x-search-field-clear", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-select.tsx b/adapters/solid/src/x-select.tsx new file mode 100644 index 0000000..a34d79f --- /dev/null +++ b/adapters/solid/src/x-select.tsx @@ -0,0 +1,67 @@ +// x-select.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup, createEffect } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XSelect as XSelectElement } from "@vanelsas/baredom/x-select"; +import { init } from "@vanelsas/baredom/x-select"; + +init(); + +export interface XSelectProps { + disabled?: boolean; + required?: boolean; + value?: string; + defaultValue?: string; + onChangeRequest?: (e: CustomEvent<{ value: string; label: string; previousValue: string }>) => void; + onSelectChange?: (e: CustomEvent<{ value: string; label: string }>) => void; + ref?: XSelectElement | ((el: XSelectElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XSelect(props: XSelectProps): JSX.Element { + const [local, others] = splitProps(props, ["value", "defaultValue", "onChangeRequest", "onSelectChange", "ref", "children"]); + let el!: XSelectElement; + + const setRef = (r: XSelectElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el || local.value !== undefined || local.defaultValue === undefined) return; + el.setAttribute("value", String(local.defaultValue)); + }); + + createEffect(() => { + if (!el) return; + const v = local.value; + if (v === undefined) return; + el.setAttribute("value", String(v)); + }); + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => { + if (local.value !== undefined) e.preventDefault(); + local.onChangeRequest?.(e as CustomEvent<{ value: string; label: string; previousValue: string }>); + }; + el.addEventListener("x-select-change-request", handler); + onCleanup(() => el.removeEventListener("x-select-change-request", handler)); + } + { + const handler = (e: Event) => local.onSelectChange?.(e as CustomEvent<{ value: string; label: string }>); + el.addEventListener("select-change", handler); + onCleanup(() => el.removeEventListener("select-change", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-sidebar.tsx b/adapters/solid/src/x-sidebar.tsx new file mode 100644 index 0000000..6dbaa3b --- /dev/null +++ b/adapters/solid/src/x-sidebar.tsx @@ -0,0 +1,50 @@ +// x-sidebar.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XSidebar as XSidebarElement } from "@vanelsas/baredom/x-sidebar"; +import { init } from "@vanelsas/baredom/x-sidebar"; + +init(); + +export interface XSidebarProps { + open?: boolean; + collapsed?: boolean; + onToggle?: (e: CustomEvent<{ open: boolean }>) => void; + onDismiss?: (e: CustomEvent<{ reason: string }>) => void; + ref?: XSidebarElement | ((el: XSidebarElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XSidebar(props: XSidebarProps): JSX.Element { + const [local, others] = splitProps(props, ["onToggle", "onDismiss", "ref", "children"]); + let el!: XSidebarElement; + + const setRef = (r: XSidebarElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onToggle?.(e as CustomEvent<{ open: boolean }>); + el.addEventListener("toggle", handler); + onCleanup(() => el.removeEventListener("toggle", handler)); + } + { + const handler = (e: Event) => local.onDismiss?.(e as CustomEvent<{ reason: string }>); + el.addEventListener("dismiss", handler); + onCleanup(() => el.removeEventListener("dismiss", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-skeleton-group.tsx b/adapters/solid/src/x-skeleton-group.tsx new file mode 100644 index 0000000..84fc233 --- /dev/null +++ b/adapters/solid/src/x-skeleton-group.tsx @@ -0,0 +1,35 @@ +// x-skeleton-group.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XSkeletonGroup as XSkeletonGroupElement } from "@vanelsas/baredom/x-skeleton-group"; +import { init } from "@vanelsas/baredom/x-skeleton-group"; + +init(); + +export interface XSkeletonGroupProps { + preset?: string; + animation?: string; + count?: number; + ref?: XSkeletonGroupElement | ((el: XSkeletonGroupElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XSkeletonGroup(props: XSkeletonGroupProps): JSX.Element { + const [local, others] = splitProps(props, ["ref", "children"]); + let el!: XSkeletonGroupElement; + + const setRef = (r: XSkeletonGroupElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-skeleton.tsx b/adapters/solid/src/x-skeleton.tsx new file mode 100644 index 0000000..f05280d --- /dev/null +++ b/adapters/solid/src/x-skeleton.tsx @@ -0,0 +1,36 @@ +// x-skeleton.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XSkeleton as XSkeletonElement } from "@vanelsas/baredom/x-skeleton"; +import { init } from "@vanelsas/baredom/x-skeleton"; + +init(); + +export interface XSkeletonProps { + variant?: string; + animation?: string; + width?: string; + height?: string; + ref?: XSkeletonElement | ((el: XSkeletonElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XSkeleton(props: XSkeletonProps): JSX.Element { + const [local, others] = splitProps(props, ["ref", "children"]); + let el!: XSkeletonElement; + + const setRef = (r: XSkeletonElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-slider.tsx b/adapters/solid/src/x-slider.tsx new file mode 100644 index 0000000..4e297b4 --- /dev/null +++ b/adapters/solid/src/x-slider.tsx @@ -0,0 +1,80 @@ +// x-slider.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup, createEffect } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XSlider as XSliderElement } from "@vanelsas/baredom/x-slider"; +import { init } from "@vanelsas/baredom/x-slider"; + +init(); + +export interface XSliderProps { + min?: string; + disabled?: boolean; + showValue?: boolean; + name?: string; + value?: string; + size?: string; + readOnly?: boolean; + max?: string; + label?: string; + step?: string; + defaultValue?: string; + onChangeRequest?: (e: CustomEvent<{ value: number; previousValue: number; min: number; max: number }>) => void; + onInput?: (e: CustomEvent<{ value: number; min: number; max: number }>) => void; + onChange?: (e: CustomEvent<{ value: number; min: number; max: number }>) => void; + ref?: XSliderElement | ((el: XSliderElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XSlider(props: XSliderProps): JSX.Element { + const [local, others] = splitProps(props, ["value", "defaultValue", "onChangeRequest", "onInput", "onChange", "ref", "children"]); + let el!: XSliderElement; + + const setRef = (r: XSliderElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el || local.value !== undefined || local.defaultValue === undefined) return; + el.setAttribute("value", String(local.defaultValue)); + }); + + createEffect(() => { + if (!el) return; + const v = local.value; + if (v === undefined) return; + el.setAttribute("value", String(v)); + }); + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => { + if (local.value !== undefined) e.preventDefault(); + local.onChangeRequest?.(e as CustomEvent<{ value: number; previousValue: number; min: number; max: number }>); + }; + el.addEventListener("x-slider-change-request", handler); + onCleanup(() => el.removeEventListener("x-slider-change-request", handler)); + } + { + const handler = (e: Event) => local.onInput?.(e as CustomEvent<{ value: number; min: number; max: number }>); + el.addEventListener("x-slider-input", handler); + onCleanup(() => el.removeEventListener("x-slider-input", handler)); + } + { + const handler = (e: Event) => local.onChange?.(e as CustomEvent<{ value: number; min: number; max: number }>); + el.addEventListener("x-slider-change", handler); + onCleanup(() => el.removeEventListener("x-slider-change", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-soft-body.tsx b/adapters/solid/src/x-soft-body.tsx new file mode 100644 index 0000000..d215c4f --- /dev/null +++ b/adapters/solid/src/x-soft-body.tsx @@ -0,0 +1,54 @@ +// x-soft-body.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XSoftBody as XSoftBodyElement } from "@vanelsas/baredom/x-soft-body"; +import { init } from "@vanelsas/baredom/x-soft-body"; + +init(); + +export interface XSoftBodyProps { + stiffness?: number; + damping?: number; + radius?: number; + intensity?: number; + grabRadius?: number; + disabled?: boolean; + onGrab?: (e: CustomEvent<{}>) => void; + onRelease?: (e: CustomEvent<{}>) => void; + ref?: XSoftBodyElement | ((el: XSoftBodyElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XSoftBody(props: XSoftBodyProps): JSX.Element { + const [local, others] = splitProps(props, ["onGrab", "onRelease", "ref", "children"]); + let el!: XSoftBodyElement; + + const setRef = (r: XSoftBodyElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onGrab?.(e as CustomEvent<{}>); + el.addEventListener("x-soft-body-grab", handler); + onCleanup(() => el.removeEventListener("x-soft-body-grab", handler)); + } + { + const handler = (e: Event) => local.onRelease?.(e as CustomEvent<{}>); + el.addEventListener("x-soft-body-release", handler); + onCleanup(() => el.removeEventListener("x-soft-body-release", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-spacer.tsx b/adapters/solid/src/x-spacer.tsx new file mode 100644 index 0000000..6ef4e83 --- /dev/null +++ b/adapters/solid/src/x-spacer.tsx @@ -0,0 +1,35 @@ +// x-spacer.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XSpacer as XSpacerElement } from "@vanelsas/baredom/x-spacer"; +import { init } from "@vanelsas/baredom/x-spacer"; + +init(); + +export interface XSpacerProps { + size?: string; + axis?: string; + grow?: boolean; + ref?: XSpacerElement | ((el: XSpacerElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XSpacer(props: XSpacerProps): JSX.Element { + const [local, others] = splitProps(props, ["ref", "children"]); + let el!: XSpacerElement; + + const setRef = (r: XSpacerElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-spinner.tsx b/adapters/solid/src/x-spinner.tsx new file mode 100644 index 0000000..6fec70f --- /dev/null +++ b/adapters/solid/src/x-spinner.tsx @@ -0,0 +1,35 @@ +// x-spinner.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XSpinner as XSpinnerElement } from "@vanelsas/baredom/x-spinner"; +import { init } from "@vanelsas/baredom/x-spinner"; + +init(); + +export interface XSpinnerProps { + size?: string; + variant?: string; + label?: string; + ref?: XSpinnerElement | ((el: XSpinnerElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XSpinner(props: XSpinnerProps): JSX.Element { + const [local, others] = splitProps(props, ["ref", "children"]); + let el!: XSpinnerElement; + + const setRef = (r: XSpinnerElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-splash.tsx b/adapters/solid/src/x-splash.tsx new file mode 100644 index 0000000..c00cdfc --- /dev/null +++ b/adapters/solid/src/x-splash.tsx @@ -0,0 +1,47 @@ +// x-splash.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XSplash as XSplashElement } from "@vanelsas/baredom/x-splash"; +import { init } from "@vanelsas/baredom/x-splash"; + +init(); + +export interface XSplashProps { + active?: boolean; + variant?: string; + progress?: number; + spinner?: boolean; + overlay?: string; + onHidden?: (e: CustomEvent<{}>) => void; + ref?: XSplashElement | ((el: XSplashElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XSplash(props: XSplashProps): JSX.Element { + const [local, others] = splitProps(props, ["onHidden", "ref", "children"]); + let el!: XSplashElement; + + const setRef = (r: XSplashElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onHidden?.(e as CustomEvent<{}>); + el.addEventListener("x-splash-hidden", handler); + onCleanup(() => el.removeEventListener("x-splash-hidden", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-split-pane.tsx b/adapters/solid/src/x-split-pane.tsx new file mode 100644 index 0000000..420c5b6 --- /dev/null +++ b/adapters/solid/src/x-split-pane.tsx @@ -0,0 +1,54 @@ +// x-split-pane.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XSplitPane as XSplitPaneElement } from "@vanelsas/baredom/x-split-pane"; +import { init } from "@vanelsas/baredom/x-split-pane"; + +init(); + +export interface XSplitPaneProps { + orientation?: string; + position?: number; + minStart?: number; + minEnd?: number; + disabled?: boolean; + dividerLabel?: string; + onResize?: (e: CustomEvent<{ position: number; orientation: string }>) => void; + onResizeEnd?: (e: CustomEvent<{ position: number; orientation: string }>) => void; + ref?: XSplitPaneElement | ((el: XSplitPaneElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XSplitPane(props: XSplitPaneProps): JSX.Element { + const [local, others] = splitProps(props, ["onResize", "onResizeEnd", "ref", "children"]); + let el!: XSplitPaneElement; + + const setRef = (r: XSplitPaneElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onResize?.(e as CustomEvent<{ position: number; orientation: string }>); + el.addEventListener("x-split-pane-resize", handler); + onCleanup(() => el.removeEventListener("x-split-pane-resize", handler)); + } + { + const handler = (e: Event) => local.onResizeEnd?.(e as CustomEvent<{ position: number; orientation: string }>); + el.addEventListener("x-split-pane-resize-end", handler); + onCleanup(() => el.removeEventListener("x-split-pane-resize-end", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-spotlight-card.tsx b/adapters/solid/src/x-spotlight-card.tsx new file mode 100644 index 0000000..c6086f5 --- /dev/null +++ b/adapters/solid/src/x-spotlight-card.tsx @@ -0,0 +1,39 @@ +// x-spotlight-card.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XSpotlightCard as XSpotlightCardElement } from "@vanelsas/baredom/x-spotlight-card"; +import { init } from "@vanelsas/baredom/x-spotlight-card"; + +init(); + +export interface XSpotlightCardProps { + variant?: string; + radius?: string; + padding?: string; + color?: string; + intensity?: string; + size?: string; + static?: boolean; + ref?: XSpotlightCardElement | ((el: XSpotlightCardElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XSpotlightCard(props: XSpotlightCardProps): JSX.Element { + const [local, others] = splitProps(props, ["ref", "children"]); + let el!: XSpotlightCardElement; + + const setRef = (r: XSpotlightCardElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-stat.tsx b/adapters/solid/src/x-stat.tsx new file mode 100644 index 0000000..85cc493 --- /dev/null +++ b/adapters/solid/src/x-stat.tsx @@ -0,0 +1,41 @@ +// x-stat.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XStat as XStatElement } from "@vanelsas/baredom/x-stat"; +import { init } from "@vanelsas/baredom/x-stat"; + +init(); + +export interface XStatProps { + trend?: string; + align?: string; + variant?: string; + value?: string; + hint?: string; + size?: string; + loading?: boolean; + label?: string; + emphasis?: string; + ref?: XStatElement | ((el: XStatElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XStat(props: XStatProps): JSX.Element { + const [local, others] = splitProps(props, ["ref", "children"]); + let el!: XStatElement; + + const setRef = (r: XStatElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-stepper.tsx b/adapters/solid/src/x-stepper.tsx new file mode 100644 index 0000000..0223017 --- /dev/null +++ b/adapters/solid/src/x-stepper.tsx @@ -0,0 +1,47 @@ +// x-stepper.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XStepper as XStepperElement } from "@vanelsas/baredom/x-stepper"; +import { init } from "@vanelsas/baredom/x-stepper"; + +init(); + +export interface XStepperProps { + steps?: string; + current?: number; + orientation?: string; + size?: string; + disabled?: boolean; + onChange?: (e: CustomEvent<{ from: number; to: number }>) => void; + ref?: XStepperElement | ((el: XStepperElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XStepper(props: XStepperProps): JSX.Element { + const [local, others] = splitProps(props, ["onChange", "ref", "children"]); + let el!: XStepperElement; + + const setRef = (r: XStepperElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onChange?.(e as CustomEvent<{ from: number; to: number }>); + el.addEventListener("x-stepper-change", handler); + onCleanup(() => el.removeEventListener("x-stepper-change", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-switch.tsx b/adapters/solid/src/x-switch.tsx new file mode 100644 index 0000000..afcde41 --- /dev/null +++ b/adapters/solid/src/x-switch.tsx @@ -0,0 +1,72 @@ +// x-switch.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup, createEffect } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XSwitch as XSwitchElement } from "@vanelsas/baredom/x-switch"; +import { init } from "@vanelsas/baredom/x-switch"; + +init(); + +export interface XSwitchProps { + checked?: boolean; + disabled?: boolean; + readOnly?: boolean; + required?: boolean; + name?: string; + value?: string; + defaultChecked?: boolean; + onChangeRequest?: (e: CustomEvent<{ value: string; previousChecked: boolean; nextChecked: boolean }>) => void; + onChange?: (e: CustomEvent<{ value: string; checked: boolean }>) => void; + ref?: XSwitchElement | ((el: XSwitchElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XSwitch(props: XSwitchProps): JSX.Element { + const [local, others] = splitProps(props, ["checked", "defaultChecked", "onChangeRequest", "onChange", "ref", "children"]); + let el!: XSwitchElement; + + const setRef = (r: XSwitchElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el || local.checked !== undefined || local.defaultChecked === undefined) return; + if (local.defaultChecked) el.setAttribute("checked", ""); + else el.removeAttribute("checked"); + }); + + createEffect(() => { + if (!el) return; + const v = local.checked; + if (v === undefined) return; + if (v) el.setAttribute("checked", ""); + else el.removeAttribute("checked"); + }); + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => { + if (local.checked !== undefined) e.preventDefault(); + local.onChangeRequest?.(e as CustomEvent<{ value: string; previousChecked: boolean; nextChecked: boolean }>); + }; + el.addEventListener("x-switch-change-request", handler); + onCleanup(() => el.removeEventListener("x-switch-change-request", handler)); + } + { + const handler = (e: Event) => local.onChange?.(e as CustomEvent<{ value: string; checked: boolean }>); + el.addEventListener("x-switch-change", handler); + onCleanup(() => el.removeEventListener("x-switch-change", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-tab.tsx b/adapters/solid/src/x-tab.tsx new file mode 100644 index 0000000..35ffcce --- /dev/null +++ b/adapters/solid/src/x-tab.tsx @@ -0,0 +1,45 @@ +// x-tab.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XTab as XTabElement } from "@vanelsas/baredom/x-tab"; +import { init } from "@vanelsas/baredom/x-tab"; + +init(); + +export interface XTabProps { + selected?: boolean; + disabled?: boolean; + value?: string; + onTabSelect?: (e: CustomEvent<{ value: string }>) => void; + ref?: XTabElement | ((el: XTabElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XTab(props: XTabProps): JSX.Element { + const [local, others] = splitProps(props, ["onTabSelect", "ref", "children"]); + let el!: XTabElement; + + const setRef = (r: XTabElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onTabSelect?.(e as CustomEvent<{ value: string }>); + el.addEventListener("tab-select", handler); + onCleanup(() => el.removeEventListener("tab-select", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-table-cell.tsx b/adapters/solid/src/x-table-cell.tsx new file mode 100644 index 0000000..d0cdce3 --- /dev/null +++ b/adapters/solid/src/x-table-cell.tsx @@ -0,0 +1,65 @@ +// x-table-cell.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XTableCell as XTableCellElement } from "@vanelsas/baredom/x-table-cell"; +import { init } from "@vanelsas/baredom/x-table-cell"; + +init(); + +export interface XTableCellProps { + align?: string; + rowSpan?: number; + truncate?: boolean; + disabled?: boolean; + valign?: string; + type?: string; + scope?: string; + colSpan?: number; + sticky?: string; + sortable?: boolean; + sortDirection?: string; + onSort?: (e: CustomEvent<{ direction: string; previousDirection: string }>) => void; + onConnected?: (e: CustomEvent<{ type: string; scope: string; colSpan: number; rowSpan: number; align: string }>) => void; + onDisconnected?: (e: CustomEvent<{}>) => void; + ref?: XTableCellElement | ((el: XTableCellElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XTableCell(props: XTableCellProps): JSX.Element { + const [local, others] = splitProps(props, ["onSort", "onConnected", "onDisconnected", "ref", "children"]); + let el!: XTableCellElement; + + const setRef = (r: XTableCellElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onSort?.(e as CustomEvent<{ direction: string; previousDirection: string }>); + el.addEventListener("x-table-cell-sort", handler); + onCleanup(() => el.removeEventListener("x-table-cell-sort", handler)); + } + { + const handler = (e: Event) => local.onConnected?.(e as CustomEvent<{ type: string; scope: string; colSpan: number; rowSpan: number; align: string }>); + el.addEventListener("x-table-cell-connected", handler); + onCleanup(() => el.removeEventListener("x-table-cell-connected", handler)); + } + { + const handler = (e: Event) => local.onDisconnected?.(e as CustomEvent<{}>); + el.addEventListener("x-table-cell-disconnected", handler); + onCleanup(() => el.removeEventListener("x-table-cell-disconnected", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-table-row.tsx b/adapters/solid/src/x-table-row.tsx new file mode 100644 index 0000000..f743a02 --- /dev/null +++ b/adapters/solid/src/x-table-row.tsx @@ -0,0 +1,58 @@ +// x-table-row.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XTableRow as XTableRowElement } from "@vanelsas/baredom/x-table-row"; +import { init } from "@vanelsas/baredom/x-table-row"; + +init(); + +export interface XTableRowProps { + selected?: boolean; + disabled?: boolean; + interactive?: boolean; + rowIndex?: number; + onClick?: (e: CustomEvent<{ rowIndex: number; selected: boolean; disabled: boolean }>) => void; + onConnected?: (e: CustomEvent<{ rowIndex: number; selected: boolean; disabled: boolean; interactive: boolean }>) => void; + onDisconnected?: (e: CustomEvent<{}>) => void; + ref?: XTableRowElement | ((el: XTableRowElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XTableRow(props: XTableRowProps): JSX.Element { + const [local, others] = splitProps(props, ["onClick", "onConnected", "onDisconnected", "ref", "children"]); + let el!: XTableRowElement; + + const setRef = (r: XTableRowElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onClick?.(e as CustomEvent<{ rowIndex: number; selected: boolean; disabled: boolean }>); + el.addEventListener("x-table-row-click", handler); + onCleanup(() => el.removeEventListener("x-table-row-click", handler)); + } + { + const handler = (e: Event) => local.onConnected?.(e as CustomEvent<{ rowIndex: number; selected: boolean; disabled: boolean; interactive: boolean }>); + el.addEventListener("x-table-row-connected", handler); + onCleanup(() => el.removeEventListener("x-table-row-connected", handler)); + } + { + const handler = (e: Event) => local.onDisconnected?.(e as CustomEvent<{}>); + el.addEventListener("x-table-row-disconnected", handler); + onCleanup(() => el.removeEventListener("x-table-row-disconnected", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-table.tsx b/adapters/solid/src/x-table.tsx new file mode 100644 index 0000000..5ad1504 --- /dev/null +++ b/adapters/solid/src/x-table.tsx @@ -0,0 +1,56 @@ +// x-table.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XTable as XTableElement } from "@vanelsas/baredom/x-table"; +import { init } from "@vanelsas/baredom/x-table"; + +init(); + +export interface XTableProps { + columns?: string; + caption?: string; + selectable?: string; + striped?: boolean; + bordered?: boolean; + fullWidth?: boolean; + compact?: boolean; + rowCount?: number; + onSort?: (e: CustomEvent<{ colIndex: number; direction: string; previousDirection: string }>) => void; + onRowSelect?: (e: CustomEvent<{ rowIndex: number; selected: boolean; selectionMode: string }>) => void; + ref?: XTableElement | ((el: XTableElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XTable(props: XTableProps): JSX.Element { + const [local, others] = splitProps(props, ["onSort", "onRowSelect", "ref", "children"]); + let el!: XTableElement; + + const setRef = (r: XTableElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onSort?.(e as CustomEvent<{ colIndex: number; direction: string; previousDirection: string }>); + el.addEventListener("x-table-sort", handler); + onCleanup(() => el.removeEventListener("x-table-sort", handler)); + } + { + const handler = (e: Event) => local.onRowSelect?.(e as CustomEvent<{ rowIndex: number; selected: boolean; selectionMode: string }>); + el.addEventListener("x-table-row-select", handler); + onCleanup(() => el.removeEventListener("x-table-row-select", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-tabs.tsx b/adapters/solid/src/x-tabs.tsx new file mode 100644 index 0000000..25535cc --- /dev/null +++ b/adapters/solid/src/x-tabs.tsx @@ -0,0 +1,65 @@ +// x-tabs.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup, createEffect } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XTabs as XTabsElement } from "@vanelsas/baredom/x-tabs"; +import { init } from "@vanelsas/baredom/x-tabs"; + +init(); + +export interface XTabsProps { + value?: string; + defaultValue?: string; + onValueChangeRequest?: (e: CustomEvent<{ value: string; previousValue: string }>) => void; + onValueChange?: (e: CustomEvent<{ value: string }>) => void; + ref?: XTabsElement | ((el: XTabsElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XTabs(props: XTabsProps): JSX.Element { + const [local, others] = splitProps(props, ["value", "defaultValue", "onValueChangeRequest", "onValueChange", "ref", "children"]); + let el!: XTabsElement; + + const setRef = (r: XTabsElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el || local.value !== undefined || local.defaultValue === undefined) return; + el.setAttribute("value", String(local.defaultValue)); + }); + + createEffect(() => { + if (!el) return; + const v = local.value; + if (v === undefined) return; + el.setAttribute("value", String(v)); + }); + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => { + if (local.value !== undefined) e.preventDefault(); + local.onValueChangeRequest?.(e as CustomEvent<{ value: string; previousValue: string }>); + }; + el.addEventListener("value-change-request", handler); + onCleanup(() => el.removeEventListener("value-change-request", handler)); + } + { + const handler = (e: Event) => local.onValueChange?.(e as CustomEvent<{ value: string }>); + el.addEventListener("value-change", handler); + onCleanup(() => el.removeEventListener("value-change", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-text-area.tsx b/adapters/solid/src/x-text-area.tsx new file mode 100644 index 0000000..f50e897 --- /dev/null +++ b/adapters/solid/src/x-text-area.tsx @@ -0,0 +1,79 @@ +// x-text-area.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup, createEffect } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XTextArea as XTextAreaElement } from "@vanelsas/baredom/x-text-area"; +import { init } from "@vanelsas/baredom/x-text-area"; + +init(); + +export interface XTextAreaProps { + disabled?: boolean; + name?: string; + value?: string; + minLength?: number; + rows?: number; + readOnly?: boolean; + maxLength?: number; + autocomplete?: string; + required?: boolean; + defaultValue?: string; + onChangeRequest?: (e: CustomEvent<{ name: string; value: string; previousValue: string }>) => void; + onInput?: (e: CustomEvent<{ name: string; value: string }>) => void; + onChange?: (e: CustomEvent<{ name: string; value: string }>) => void; + ref?: XTextAreaElement | ((el: XTextAreaElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XTextArea(props: XTextAreaProps): JSX.Element { + const [local, others] = splitProps(props, ["value", "defaultValue", "onChangeRequest", "onInput", "onChange", "ref", "children"]); + let el!: XTextAreaElement; + + const setRef = (r: XTextAreaElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el || local.value !== undefined || local.defaultValue === undefined) return; + el.setAttribute("value", String(local.defaultValue)); + }); + + createEffect(() => { + if (!el) return; + const v = local.value; + if (v === undefined) return; + el.setAttribute("value", String(v)); + }); + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => { + if (local.value !== undefined) e.preventDefault(); + local.onChangeRequest?.(e as CustomEvent<{ name: string; value: string; previousValue: string }>); + }; + el.addEventListener("x-text-area-change-request", handler); + onCleanup(() => el.removeEventListener("x-text-area-change-request", handler)); + } + { + const handler = (e: Event) => local.onInput?.(e as CustomEvent<{ name: string; value: string }>); + el.addEventListener("x-text-area-input", handler); + onCleanup(() => el.removeEventListener("x-text-area-input", handler)); + } + { + const handler = (e: Event) => local.onChange?.(e as CustomEvent<{ name: string; value: string }>); + el.addEventListener("x-text-area-change", handler); + onCleanup(() => el.removeEventListener("x-text-area-change", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-theme.tsx b/adapters/solid/src/x-theme.tsx new file mode 100644 index 0000000..ede829c --- /dev/null +++ b/adapters/solid/src/x-theme.tsx @@ -0,0 +1,33 @@ +// x-theme.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XTheme as XThemeElement } from "@vanelsas/baredom/x-theme"; +import { init } from "@vanelsas/baredom/x-theme"; + +init(); + +export interface XThemeProps { + preset?: string; + ref?: XThemeElement | ((el: XThemeElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XTheme(props: XThemeProps): JSX.Element { + const [local, others] = splitProps(props, ["ref", "children"]); + let el!: XThemeElement; + + const setRef = (r: XThemeElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-timeline-item.tsx b/adapters/solid/src/x-timeline-item.tsx new file mode 100644 index 0000000..3a06d68 --- /dev/null +++ b/adapters/solid/src/x-timeline-item.tsx @@ -0,0 +1,61 @@ +// x-timeline-item.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XTimelineItem as XTimelineItemElement } from "@vanelsas/baredom/x-timeline-item"; +import { init } from "@vanelsas/baredom/x-timeline-item"; + +init(); + +export interface XTimelineItemProps { + label?: string; + title?: string; + status?: string; + icon?: string; + connector?: string; + position?: string; + disabled?: boolean; + onConnected?: (e: CustomEvent<{ status: string; label: string; position: string; disabled: boolean }>) => void; + onDisconnected?: (e: CustomEvent<{ status: string; label: string }>) => void; + onClick?: (e: CustomEvent<{ status: string; label: string }>) => void; + ref?: XTimelineItemElement | ((el: XTimelineItemElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XTimelineItem(props: XTimelineItemProps): JSX.Element { + const [local, others] = splitProps(props, ["onConnected", "onDisconnected", "onClick", "ref", "children"]); + let el!: XTimelineItemElement; + + const setRef = (r: XTimelineItemElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onConnected?.(e as CustomEvent<{ status: string; label: string; position: string; disabled: boolean }>); + el.addEventListener("x-timeline-item-connected", handler); + onCleanup(() => el.removeEventListener("x-timeline-item-connected", handler)); + } + { + const handler = (e: Event) => local.onDisconnected?.(e as CustomEvent<{ status: string; label: string }>); + el.addEventListener("x-timeline-item-disconnected", handler); + onCleanup(() => el.removeEventListener("x-timeline-item-disconnected", handler)); + } + { + const handler = (e: Event) => local.onClick?.(e as CustomEvent<{ status: string; label: string }>); + el.addEventListener("x-timeline-item-click", handler); + onCleanup(() => el.removeEventListener("x-timeline-item-click", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-timeline.tsx b/adapters/solid/src/x-timeline.tsx new file mode 100644 index 0000000..2508212 --- /dev/null +++ b/adapters/solid/src/x-timeline.tsx @@ -0,0 +1,45 @@ +// x-timeline.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XTimeline as XTimelineElement } from "@vanelsas/baredom/x-timeline"; +import { init } from "@vanelsas/baredom/x-timeline"; + +init(); + +export interface XTimelineProps { + label?: string; + position?: string; + striped?: boolean; + onSelect?: (e: CustomEvent<{ index: number; status: string; label: string }>) => void; + ref?: XTimelineElement | ((el: XTimelineElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XTimeline(props: XTimelineProps): JSX.Element { + const [local, others] = splitProps(props, ["onSelect", "ref", "children"]); + let el!: XTimelineElement; + + const setRef = (r: XTimelineElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onSelect?.(e as CustomEvent<{ index: number; status: string; label: string }>); + el.addEventListener("x-timeline-select", handler); + onCleanup(() => el.removeEventListener("x-timeline-select", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-toast.tsx b/adapters/solid/src/x-toast.tsx new file mode 100644 index 0000000..716cf17 --- /dev/null +++ b/adapters/solid/src/x-toast.tsx @@ -0,0 +1,50 @@ +// x-toast.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XToast as XToastElement } from "@vanelsas/baredom/x-toast"; +import { init } from "@vanelsas/baredom/x-toast"; + +init(); + +export interface XToastProps { + type?: string; + heading?: string; + message?: string; + icon?: string; + dismissible?: boolean; + disabled?: boolean; + timeoutMs?: number; + showProgress?: boolean; + onDismiss?: (e: CustomEvent<{ type: string; reason: string; heading: string; message: string }>) => void; + ref?: XToastElement | ((el: XToastElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XToast(props: XToastProps): JSX.Element { + const [local, others] = splitProps(props, ["onDismiss", "ref", "children"]); + let el!: XToastElement; + + const setRef = (r: XToastElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onDismiss?.(e as CustomEvent<{ type: string; reason: string; heading: string; message: string }>); + el.addEventListener("x-toast-dismiss", handler); + onCleanup(() => el.removeEventListener("x-toast-dismiss", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-toaster.tsx b/adapters/solid/src/x-toaster.tsx new file mode 100644 index 0000000..11f92fb --- /dev/null +++ b/adapters/solid/src/x-toaster.tsx @@ -0,0 +1,45 @@ +// x-toaster.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XToaster as XToasterElement } from "@vanelsas/baredom/x-toaster"; +import { init } from "@vanelsas/baredom/x-toaster"; + +init(); + +export interface XToasterProps { + position?: string; + maxToasts?: number; + label?: string; + onDismiss?: (e: CustomEvent<{ type: string; reason: string; heading: string; message: string }>) => void; + ref?: XToasterElement | ((el: XToasterElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XToaster(props: XToasterProps): JSX.Element { + const [local, others] = splitProps(props, ["onDismiss", "ref", "children"]); + let el!: XToasterElement; + + const setRef = (r: XToasterElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onDismiss?.(e as CustomEvent<{ type: string; reason: string; heading: string; message: string }>); + el.addEventListener("x-toaster-dismiss", handler); + onCleanup(() => el.removeEventListener("x-toaster-dismiss", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-tooltip.tsx b/adapters/solid/src/x-tooltip.tsx new file mode 100644 index 0000000..6b97592 --- /dev/null +++ b/adapters/solid/src/x-tooltip.tsx @@ -0,0 +1,53 @@ +// x-tooltip.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XTooltip as XTooltipElement } from "@vanelsas/baredom/x-tooltip"; +import { init } from "@vanelsas/baredom/x-tooltip"; + +init(); + +export interface XTooltipProps { + text?: string; + placement?: string; + delay?: number; + disabled?: boolean; + open?: boolean; + onShow?: (e: CustomEvent<{}>) => void; + onHide?: (e: CustomEvent<{}>) => void; + ref?: XTooltipElement | ((el: XTooltipElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XTooltip(props: XTooltipProps): JSX.Element { + const [local, others] = splitProps(props, ["onShow", "onHide", "ref", "children"]); + let el!: XTooltipElement; + + const setRef = (r: XTooltipElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onShow?.(e as CustomEvent<{}>); + el.addEventListener("x-tooltip-show", handler); + onCleanup(() => el.removeEventListener("x-tooltip-show", handler)); + } + { + const handler = (e: Event) => local.onHide?.(e as CustomEvent<{}>); + el.addEventListener("x-tooltip-hide", handler); + onCleanup(() => el.removeEventListener("x-tooltip-hide", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-typography.tsx b/adapters/solid/src/x-typography.tsx new file mode 100644 index 0000000..d312aca --- /dev/null +++ b/adapters/solid/src/x-typography.tsx @@ -0,0 +1,36 @@ +// x-typography.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XTypography as XTypographyElement } from "@vanelsas/baredom/x-typography"; +import { init } from "@vanelsas/baredom/x-typography"; + +init(); + +export interface XTypographyProps { + variant?: string; + align?: string; + truncate?: boolean; + lineClamp?: number; + ref?: XTypographyElement | ((el: XTypographyElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XTypography(props: XTypographyProps): JSX.Element { + const [local, others] = splitProps(props, ["ref", "children"]); + let el!: XTypographyElement; + + const setRef = (r: XTypographyElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/src/x-welcome-tour.tsx b/adapters/solid/src/x-welcome-tour.tsx new file mode 100644 index 0000000..499a339 --- /dev/null +++ b/adapters/solid/src/x-welcome-tour.tsx @@ -0,0 +1,69 @@ +// x-welcome-tour.tsx — auto-generated by generate_solid.bb, do not edit +import { splitProps, onMount, onCleanup } from "solid-js"; +import type { JSX } from "solid-js"; +import type { XWelcomeTour as XWelcomeTourElement } from "@vanelsas/baredom/x-welcome-tour"; +import { init } from "@vanelsas/baredom/x-welcome-tour"; + +init(); + +export interface XWelcomeTourProps { + connector?: string; + open?: boolean; + prevLabel?: string; + nextLabel?: string; + counter?: boolean; + doneLabel?: string; + skipLabel?: string; + dots?: boolean; + step?: number; + onStart?: (e: CustomEvent<{}>) => void; + onStepChange?: (e: CustomEvent<{ step: number; previousStep: number }>) => void; + onComplete?: (e: CustomEvent<{ stepsCompleted: number }>) => void; + onSkip?: (e: CustomEvent<{ step: number }>) => void; + ref?: XWelcomeTourElement | ((el: XWelcomeTourElement) => void); + children?: JSX.Element; + class?: string; + style?: JSX.CSSProperties | string; + id?: string; + slot?: string; +} + +export function XWelcomeTour(props: XWelcomeTourProps): JSX.Element { + const [local, others] = splitProps(props, ["onStart", "onStepChange", "onComplete", "onSkip", "ref", "children"]); + let el!: XWelcomeTourElement; + + const setRef = (r: XWelcomeTourElement) => { + el = r; + if (typeof local.ref === "function") local.ref(r); + }; + + onMount(() => { + if (!el) return; + { + const handler = (e: Event) => local.onStart?.(e as CustomEvent<{}>); + el.addEventListener("x-welcome-tour-start", handler); + onCleanup(() => el.removeEventListener("x-welcome-tour-start", handler)); + } + { + const handler = (e: Event) => local.onStepChange?.(e as CustomEvent<{ step: number; previousStep: number }>); + el.addEventListener("x-welcome-tour-step-change", handler); + onCleanup(() => el.removeEventListener("x-welcome-tour-step-change", handler)); + } + { + const handler = (e: Event) => local.onComplete?.(e as CustomEvent<{ stepsCompleted: number }>); + el.addEventListener("x-welcome-tour-complete", handler); + onCleanup(() => el.removeEventListener("x-welcome-tour-complete", handler)); + } + { + const handler = (e: Event) => local.onSkip?.(e as CustomEvent<{ step: number }>); + el.addEventListener("x-welcome-tour-skip", handler); + onCleanup(() => el.removeEventListener("x-welcome-tour-skip", handler)); + } + }); + + return ( + + {local.children} + + ); +} diff --git a/adapters/solid/test-app/index.html b/adapters/solid/test-app/index.html new file mode 100644 index 0000000..989a28a --- /dev/null +++ b/adapters/solid/test-app/index.html @@ -0,0 +1,29 @@ + + + + + + + BareDOM Solid Adapter Test + + + +
+ + + diff --git a/adapters/solid/test-app/package-lock.json b/adapters/solid/test-app/package-lock.json new file mode 100644 index 0000000..eaf5c61 --- /dev/null +++ b/adapters/solid/test-app/package-lock.json @@ -0,0 +1,2000 @@ +{ + "name": "baredom-solid-test-app", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "baredom-solid-test-app", + "dependencies": { + "@vanelsas/baredom": "file:../../..", + "@vanelsas/baredom-solid": "file:..", + "solid-js": "^1.9.0" + }, + "devDependencies": { + "typescript": "^5.7.0", + "vite": "^6.0.0", + "vite-plugin-solid": "^2.11.0" + } + }, + "..": { + "name": "@vanelsas/baredom-solid", + "version": "0.1.0", + "license": "MIT", + "devDependencies": { + "@vanelsas/baredom": "file:../../", + "solid-js": "^1.9.0", + "typescript": "^5.7.0" + }, + "peerDependencies": { + "@vanelsas/baredom": ">=2.6.0", + "solid-js": ">=1.9.0" + } + }, + "../../..": { + "name": "@vanelsas/baredom", + "version": "3.2.0", + "license": "MIT", + "workspaces": [ + "adapters/*" + ], + "devDependencies": { + "karma": "^6.4.4", + "karma-chrome-launcher": "^3.2.0", + "karma-cljs-test": "^0.1.0", + "shadow-cljs": "^3.4.7", + "typescript": "^6.0.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.29.7", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", + "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", + "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helpers": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.7.tgz", + "integrity": "sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", + "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", + "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", + "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", + "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz", + "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", + "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz", + "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz", + "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.7" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.29.7.tgz", + "integrity": "sha512-TSu8+mHCoEaaCDEZ0I3+6mvTBYR4PCxQwf2z9/r5Tbztv6NaLR3B9thGTTxX2WGuGHJqRiAbKPeGTJ5XWXVg6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", + "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.7.tgz", + "integrity": "sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-globals": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz", + "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.4.tgz", + "integrity": "sha512-F5QXMSiFebS9hKZj02XhWLLnRpJ3B3AROP0tWbFBSj+6kCbg5m9j5JoHKd4mmSVy5mS/IMQloYgYxCuJC0fxEQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.4.tgz", + "integrity": "sha512-GxxTKApUpzRhof7poWvCJHRF51C67u1R7D6DiluBE8wKU1u5GWE8t+v81JvJYtbawoBFX1hLv5Ei4eVjkWokaw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.4.tgz", + "integrity": "sha512-tua0TaJxMOB1R0V0RS1jFZ/RpURFDJIOR2A6jWwQeawuFyS4gBW+rntLRaQd0EQ4bd6Vp44Z2rXW+YYDBsj6IA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.4.tgz", + "integrity": "sha512-CSKq7MsP+5PFIcydhAiR1K0UhEI1A2jWXVKHPCBZ151yOutENwvnPocgVHkivu2kviURtCEB6zUQw0vs8RrhMg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.4.tgz", + "integrity": "sha512-+O8OkVdyvXMtJEciu2wS/pzm1IxntEEQx3z5TAVy4l32G0etZn+RsA48ARRrFm6Ri8fvqPQfgrvNxSjKAbnd3g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.4.tgz", + "integrity": "sha512-Iw3oMskH3AfNuhU0MSN7vNbdi4me/NiYo2azqPz/Le16zHSa+3RRmliCMWWQmh4lcndccU40xcJuTYJZxNo/lw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.4.tgz", + "integrity": "sha512-EIPRXTVQpHyF8WOo219AD2yEltPehLTcTMz2fn6JsatLYSzQf00hj3rulF+yauOlF9/FtM2WpkT/hJh/KJFGhA==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.4.tgz", + "integrity": "sha512-J3Yh9PzzF1Ovah2At+lHiGQdsYgArxBbXv/zHfSyaiFQEqvNv7DcW98pCrmdjCZBrqBiKrKKe2V+aaSGWuBe/w==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.4.tgz", + "integrity": "sha512-BFDEZMYfUvLn37ONE1yMBojPxnMlTFsdyNoqncT0qFq1mAfllL+ATMMJd8TeuVMiX84s1KbcxcZbXInmcO2mRg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.4.tgz", + "integrity": "sha512-pc9EYOSlOgdQ2uPl1o9PF6/kLSgaUosia7gOuS8mB69IxJvlclko1MECXysjs5ryez1/5zjYqx3+xYU0TU6R1A==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.4.tgz", + "integrity": "sha512-NxnomyxYerDh5n4iLrNa+sH+Z+U4BMEE46V2PgQ/hoB909i8gV1M5wPojWg9fk1jWpO3IQnOs20K4wyZuFLEFQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.4.tgz", + "integrity": "sha512-nbJnQ8a3z1mtmrwImCYhc6BGpThAyYVRQxw9uKSKG4wR6aAYno9sVjJ0zaZcW9BPJX1GbrDPf+SvdWjgTuDmnw==", + "cpu": [ + "loong64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.4.tgz", + "integrity": "sha512-2EU6acNrQLd8tYvo/LXW535wupT3m6fo7HKo6lr7ktQoItxTyOL1ZCR/GfGCuXl2vR+zmfI6eRXkSemafv+iVg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.4.tgz", + "integrity": "sha512-WeBtoMuaMxiiIrO2IYP3xs6GMWkJP2C0EoT8beTLkUPmzV1i/UcOSVw1d5r9KBODtHKilG5yFxsGRnBbK3wJ4A==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.4.tgz", + "integrity": "sha512-FJHFfqpKUI3A10WrWKiFbBZ7yVbGT4q4B5o1qKFFojqpaYoh9LrQgqWCmmcxQzVSXYtyB5bzkXrYzlHTs21MYA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.4.tgz", + "integrity": "sha512-mcEl6CUT5IAUmQf1m9FYSmVqCJlpQ8r8eyftFUHG8i9OhY7BkBXSUdnLH5DOf0wCOjcP9v/QO93zpmF1SptCCw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.4.tgz", + "integrity": "sha512-ynt3JxVd2w2buzoKDWIyiV1pJW93xlQic1THVLXilz429oijRpSHivZAgp65KBu+cMcgf1eVVjdnTLvPxgCuoQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.4.tgz", + "integrity": "sha512-Boiz5+MsaROEWDf+GGEwF8VMHGhlUoQMtIPjOgA5fv4osupqTVnJteQNKJwUcnUog2G55jYXH7KZFFiJe0TEzQ==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.4.tgz", + "integrity": "sha512-+qfSY27qIrFfI/Hom04KYFw3GKZSGU4lXus51wsb5EuySfFlWRwjkKWoE9emgRw/ukoT4Udsj4W/+xxG8VbPKg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.4.tgz", + "integrity": "sha512-VpTfOPHgVXEBeeR8hZ2O0F3aSso+JDWqTWmTmzcQKted54IAdUVbxE+j/MVxUsKa8L20HJhv3vUezVPoquqWjA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.4.tgz", + "integrity": "sha512-IPOsh5aRYuLv/nkU51X10Bf75Bsf6+gZdx1X+QP5QM6lIJFHHqbHLG0uJn/hWthzo13UAc2umiUorqZy3axoZg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.4.tgz", + "integrity": "sha512-4QzE9E81OohJ/HKzHhsqU+zcYYojVOXlFMs1DdyMT6qXl/niOH7AVElmmEdUNHHS/oRkc++d5k6Vy85zFs0DEw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.4.tgz", + "integrity": "sha512-zTPgT1YuHHcd+Tmx7h8aml0FWFVelV5N54oHow9SLj+GfoDy/huQ+UV396N/C7KpMDMiPspRktzM1/0r1usYEA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.4.tgz", + "integrity": "sha512-DRS4G7mi9lJxqEDezIkKCaUIKCrLUUDCUaCsTPCi/rtqaC6D/jjwslMQyiDU50Ka0JKpeXeRBFBAXwArY52vBw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.4.tgz", + "integrity": "sha512-QVTUovf40zgTqlFVrKA1uXMVvU2QWEFWfAH8Wdc48IxLvrJMQVMBRjuQyUpzZCDkakImib9eVazbWlC6ksWtJw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vanelsas/baredom": { + "resolved": "../../..", + "link": true + }, + "node_modules/@vanelsas/baredom-solid": { + "resolved": "..", + "link": true + }, + "node_modules/babel-plugin-jsx-dom-expressions": { + "version": "0.40.7", + "resolved": "https://registry.npmjs.org/babel-plugin-jsx-dom-expressions/-/babel-plugin-jsx-dom-expressions-0.40.7.tgz", + "integrity": "sha512-/O6JWUmjv03OI9lL2ry9bUjpD5S3PclM55RRJEyCdcFZ5W2SEA/59d+l2hNsk3gI6kiWRdRPdOtqZmsQzFN1pQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "7.18.6", + "@babel/plugin-syntax-jsx": "^7.18.6", + "@babel/types": "^7.20.7", + "html-entities": "2.3.3", + "parse5": "^7.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.20.12" + } + }, + "node_modules/babel-plugin-jsx-dom-expressions/node_modules/@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/babel-preset-solid": { + "version": "1.9.12", + "resolved": "https://registry.npmjs.org/babel-preset-solid/-/babel-preset-solid-1.9.12.tgz", + "integrity": "sha512-LLqnuKVDlKpyBlMPcH6qEvs/wmS9a+NczppxJ3ryS/c0O5IiSFOIBQi9GzyiGDSbcJpx4Gr87jyFTos1MyEuWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-plugin-jsx-dom-expressions": "^0.40.6" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "solid-js": "^1.9.12" + }, + "peerDependenciesMeta": { + "solid-js": { + "optional": true + } + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.32", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.32.tgz", + "integrity": "sha512-wbPvpyjJPC0zdfdKXxqEL3Ea+bOMD/87X4lftiJkkaBiuG6ALQy1SLmEd7BSmVCuwCQsBrCamgBoLyfFDD1EPg==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/browserslist": { + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", + "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.10.12", + "caniuse-lite": "^1.0.30001782", + "electron-to-chromium": "^1.5.328", + "node-releases": "^2.0.36", + "update-browserslist-db": "^1.2.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001793", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001793.tgz", + "integrity": "sha512-iwSsYWaCOoh26cV8NwNRViHlrfUvYsHDfRVcbtmw0Kg6PJIZZXwMkj1442FYLBGkeUf1juAsU3DTfxW579mrPA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.361", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.361.tgz", + "integrity": "sha512-Q6Hts7N9FnJc5LeGRINFvLhCI9xZmNtTDe5ZbcVezQz7cU4a8Aua3GH1b8J2XY8Al9PF+OCwYqhgsOOheMdvkA==", + "dev": true, + "license": "ISC" + }, + "node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/esbuild": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.12", + "@esbuild/android-arm": "0.25.12", + "@esbuild/android-arm64": "0.25.12", + "@esbuild/android-x64": "0.25.12", + "@esbuild/darwin-arm64": "0.25.12", + "@esbuild/darwin-x64": "0.25.12", + "@esbuild/freebsd-arm64": "0.25.12", + "@esbuild/freebsd-x64": "0.25.12", + "@esbuild/linux-arm": "0.25.12", + "@esbuild/linux-arm64": "0.25.12", + "@esbuild/linux-ia32": "0.25.12", + "@esbuild/linux-loong64": "0.25.12", + "@esbuild/linux-mips64el": "0.25.12", + "@esbuild/linux-ppc64": "0.25.12", + "@esbuild/linux-riscv64": "0.25.12", + "@esbuild/linux-s390x": "0.25.12", + "@esbuild/linux-x64": "0.25.12", + "@esbuild/netbsd-arm64": "0.25.12", + "@esbuild/netbsd-x64": "0.25.12", + "@esbuild/openbsd-arm64": "0.25.12", + "@esbuild/openbsd-x64": "0.25.12", + "@esbuild/openharmony-arm64": "0.25.12", + "@esbuild/sunos-x64": "0.25.12", + "@esbuild/win32-arm64": "0.25.12", + "@esbuild/win32-ia32": "0.25.12", + "@esbuild/win32-x64": "0.25.12" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/html-entities": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", + "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-what": { + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz", + "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/merge-anything": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/merge-anything/-/merge-anything-5.1.7.tgz", + "integrity": "sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-what": "^4.1.8" + }, + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.12", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz", + "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.46", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.46.tgz", + "integrity": "sha512-GYVXHE2KnrzAfsAjl4uP++evGFCrAU1jta4ubEjIG7YWt/64Gqv66a30yKwWczVjA6j3bM4nBwH7Pk1JmDHaxQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.15", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.15.tgz", + "integrity": "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.12", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/rollup": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.4.tgz", + "integrity": "sha512-WHeFSbZYsPu3+bLoNRUuAO+wavNlocOPf3wSHTP7hcFKVnJeWsYlCDbr3mTS14FCizf9ccIxXA8sGL8zKeQN3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.60.4", + "@rollup/rollup-android-arm64": "4.60.4", + "@rollup/rollup-darwin-arm64": "4.60.4", + "@rollup/rollup-darwin-x64": "4.60.4", + "@rollup/rollup-freebsd-arm64": "4.60.4", + "@rollup/rollup-freebsd-x64": "4.60.4", + "@rollup/rollup-linux-arm-gnueabihf": "4.60.4", + "@rollup/rollup-linux-arm-musleabihf": "4.60.4", + "@rollup/rollup-linux-arm64-gnu": "4.60.4", + "@rollup/rollup-linux-arm64-musl": "4.60.4", + "@rollup/rollup-linux-loong64-gnu": "4.60.4", + "@rollup/rollup-linux-loong64-musl": "4.60.4", + "@rollup/rollup-linux-ppc64-gnu": "4.60.4", + "@rollup/rollup-linux-ppc64-musl": "4.60.4", + "@rollup/rollup-linux-riscv64-gnu": "4.60.4", + "@rollup/rollup-linux-riscv64-musl": "4.60.4", + "@rollup/rollup-linux-s390x-gnu": "4.60.4", + "@rollup/rollup-linux-x64-gnu": "4.60.4", + "@rollup/rollup-linux-x64-musl": "4.60.4", + "@rollup/rollup-openbsd-x64": "4.60.4", + "@rollup/rollup-openharmony-arm64": "4.60.4", + "@rollup/rollup-win32-arm64-msvc": "4.60.4", + "@rollup/rollup-win32-ia32-msvc": "4.60.4", + "@rollup/rollup-win32-x64-gnu": "4.60.4", + "@rollup/rollup-win32-x64-msvc": "4.60.4", + "fsevents": "~2.3.2" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/seroval": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/seroval/-/seroval-1.5.4.tgz", + "integrity": "sha512-46uFvgrXTVxZcUorgSSRZ4y+ieqLLQRMlG4bnCZKW3qI6BZm7Rg4ntMW4p1mILEEBZWrFlcpp0AyIIlM6jD9iw==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/seroval-plugins": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/seroval-plugins/-/seroval-plugins-1.5.4.tgz", + "integrity": "sha512-S0xQPhUTefAhNvNWFg0c1J8qJArHt5KdtJ/cFAofo06KD1MVSeFWyl4iiu+ApDIuw0WhjpOfCdgConOfAnLgkw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "seroval": "^1.0" + } + }, + "node_modules/solid-js": { + "version": "1.9.13", + "resolved": "https://registry.npmjs.org/solid-js/-/solid-js-1.9.13.tgz", + "integrity": "sha512-6hJeJMOcEX8ktqjpDoJZEmld3ijvcvWBDtiXBm7f4332SiFN66QeAQI1REQshvyUoISsSeJ4PHDauKYbwao9JQ==", + "license": "MIT", + "dependencies": { + "csstype": "^3.1.0", + "seroval": "~1.5.0", + "seroval-plugins": "~1.5.0" + } + }, + "node_modules/solid-refresh": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/solid-refresh/-/solid-refresh-0.6.3.tgz", + "integrity": "sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/generator": "^7.23.6", + "@babel/helper-module-imports": "^7.22.15", + "@babel/types": "^7.23.6" + }, + "peerDependencies": { + "solid-js": "^1.3" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.16", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz", + "integrity": "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/vite": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.2.tgz", + "integrity": "sha512-2N/55r4JDJ4gdrCvGgINMy+HH3iRpNIz8K6SFwVsA+JbQScLiC+clmAxBgwiSPgcG9U15QmvqCGWzMbqda5zGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite-plugin-solid": { + "version": "2.11.12", + "resolved": "https://registry.npmjs.org/vite-plugin-solid/-/vite-plugin-solid-2.11.12.tgz", + "integrity": "sha512-FgjPcx2OwX9h6f28jli7A4bG7PP3te8uyakE5iqsmpq3Jqi1TWLgSroC9N6cMfGRU2zXsl4Q6ISvTr2VL0QHpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.23.3", + "@types/babel__core": "^7.20.4", + "babel-preset-solid": "^1.8.4", + "merge-anything": "^5.1.7", + "solid-refresh": "^0.6.3", + "vitefu": "^1.0.4" + }, + "peerDependencies": { + "@testing-library/jest-dom": "^5.16.6 || ^5.17.0 || ^6.*", + "solid-js": "^1.7.2", + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "@testing-library/jest-dom": { + "optional": true + } + } + }, + "node_modules/vitefu": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.3.tgz", + "integrity": "sha512-ub4okH7Z5KLjb6hDyjqrGXqWtWvoYdU3IGm/NorpgHncKoLTCfRIbvlhBm7r0YstIaQRYlp4yEbFqDcKSzXSSg==", + "dev": true, + "license": "MIT", + "workspaces": [ + "tests/deps/*", + "tests/projects/*", + "tests/projects/workspace/packages/*" + ], + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + } + } +} diff --git a/adapters/solid/test-app/package.json b/adapters/solid/test-app/package.json new file mode 100644 index 0000000..b7b79b9 --- /dev/null +++ b/adapters/solid/test-app/package.json @@ -0,0 +1,19 @@ +{ + "name": "baredom-solid-test-app", + "private": true, + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build" + }, + "dependencies": { + "solid-js": "^1.9.0", + "@vanelsas/baredom": "file:../../..", + "@vanelsas/baredom-solid": "file:.." + }, + "devDependencies": { + "typescript": "^5.7.0", + "vite": "^6.0.0", + "vite-plugin-solid": "^2.11.0" + } +} diff --git a/adapters/solid/test-app/src/App.tsx b/adapters/solid/test-app/src/App.tsx new file mode 100644 index 0000000..7b92738 --- /dev/null +++ b/adapters/solid/test-app/src/App.tsx @@ -0,0 +1,78 @@ +import { createSignal } from "solid-js"; +import { XTheme } from "@vanelsas/baredom-solid/x-theme"; +import { XButton } from "@vanelsas/baredom-solid/x-button"; +import { XCheckbox } from "@vanelsas/baredom-solid/x-checkbox"; +import { XSlider } from "@vanelsas/baredom-solid/x-slider"; +import { XSelect } from "@vanelsas/baredom-solid/x-select"; +import { XModal } from "@vanelsas/baredom-solid/x-modal"; + +export function App() { + // Event-only path + const [pressCount, setPressCount] = createSignal(0); + + // Controlled boolean (XCheckbox) + const [checked, setChecked] = createSignal(false); + + // Controlled string (XSlider) + const [sliderValue, setSliderValue] = createSignal("50"); + + // Imperative path (XModal): hold a ref and toggle the `open` attribute + let modalEl!: HTMLElement; + const [modalOpen, setModalOpen] = createSignal(false); + + return ( + +

BareDOM Solid Adapter — Smoke Test

+ +
+

1 · Event-only — XButton onPress

+ setPressCount((n) => n + 1)}> + Click me ({pressCount()}) + +
+ +
+

2 · Controlled boolean — XCheckbox checked + onChangeRequest

+ setChecked(e.detail.nextChecked)} + > + Subscribe (signal: {String(checked())}) + +
+ +
+

3 · Controlled string — XSlider value + onChangeRequest

+ setSliderValue(e.detail.value)} + /> +
value: {sliderValue()}
+
+ +
+

4 · Uncontrolled — XSelect defaultValue

+ + + + + +
+ +
+

5 · Imperative path — XModal via ref + open attribute

+ setModalOpen(true)}>Open modal + setModalOpen(false)} + > +

This is a controlled modal driven by a signal.

+ setModalOpen(false)}>Close +
+
+
+ ); +} diff --git a/adapters/solid/test-app/src/main.tsx b/adapters/solid/test-app/src/main.tsx new file mode 100644 index 0000000..2ac299a --- /dev/null +++ b/adapters/solid/test-app/src/main.tsx @@ -0,0 +1,4 @@ +import { render } from "solid-js/web"; +import { App } from "./App"; + +render(() => , document.getElementById("root")!); diff --git a/adapters/solid/test-app/tsconfig.json b/adapters/solid/test-app/tsconfig.json new file mode 100644 index 0000000..bc18d0a --- /dev/null +++ b/adapters/solid/test-app/tsconfig.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "strict": true, + "target": "ES2020", + "module": "ES2020", + "moduleResolution": "bundler", + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "jsx": "preserve", + "jsxImportSource": "solid-js", + "skipLibCheck": true + }, + "include": ["src"] +} diff --git a/adapters/solid/test-app/vite.config.ts b/adapters/solid/test-app/vite.config.ts new file mode 100644 index 0000000..4a303c3 --- /dev/null +++ b/adapters/solid/test-app/vite.config.ts @@ -0,0 +1,6 @@ +import { defineConfig } from "vite"; +import solid from "vite-plugin-solid"; + +export default defineConfig({ + plugins: [solid()], +}); diff --git a/adapters/solid/tsconfig.json b/adapters/solid/tsconfig.json new file mode 100644 index 0000000..a97bd1e --- /dev/null +++ b/adapters/solid/tsconfig.json @@ -0,0 +1,18 @@ +{ + "compilerOptions": { + "strict": true, + "target": "ES2020", + "module": "ES2020", + "moduleResolution": "bundler", + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "jsx": "preserve", + "jsxImportSource": "solid-js", + "declaration": true, + "declarationMap": true, + "sourceMap": true, + "outDir": "dist", + "rootDir": "src", + "skipLibCheck": true + }, + "include": ["src/**/*.tsx", "src/**/*.ts"] +} diff --git a/package-lock.json b/package-lock.json index 31c26e7..d0d0fd4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,7 @@ "": { "name": "@vanelsas/baredom", "version": "3.2.0", + "dev": true, "license": "MIT", "workspaces": [ "adapters/*" @@ -158,6 +159,34 @@ "node": ">=14.17" } }, + "adapters/solid": { + "name": "@vanelsas/baredom-solid", + "version": "0.1.0", + "license": "MIT", + "devDependencies": { + "@vanelsas/baredom": "file:../../", + "solid-js": "^1.9.0", + "typescript": "^5.7.0" + }, + "peerDependencies": { + "@vanelsas/baredom": ">=2.6.0", + "solid-js": ">=1.9.0" + } + }, + "adapters/solid/node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, "adapters/svelte": { "name": "@vanelsas/baredom-svelte", "version": "0.1.0", @@ -940,6 +969,10 @@ "resolved": "adapters/react", "link": true }, + "node_modules/@vanelsas/baredom-solid": { + "resolved": "adapters/solid", + "link": true + }, "node_modules/@vanelsas/baredom-svelte": { "resolved": "adapters/svelte", "link": true @@ -3049,6 +3082,29 @@ "node": ">=10" } }, + "node_modules/seroval": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/seroval/-/seroval-1.5.4.tgz", + "integrity": "sha512-46uFvgrXTVxZcUorgSSRZ4y+ieqLLQRMlG4bnCZKW3qI6BZm7Rg4ntMW4p1mILEEBZWrFlcpp0AyIIlM6jD9iw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/seroval-plugins": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/seroval-plugins/-/seroval-plugins-1.5.4.tgz", + "integrity": "sha512-S0xQPhUTefAhNvNWFg0c1J8qJArHt5KdtJ/cFAofo06KD1MVSeFWyl4iiu+ApDIuw0WhjpOfCdgConOfAnLgkw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "seroval": "^1.0" + } + }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -3302,6 +3358,18 @@ "dev": true, "license": "MIT" }, + "node_modules/solid-js": { + "version": "1.9.13", + "resolved": "https://registry.npmjs.org/solid-js/-/solid-js-1.9.13.tgz", + "integrity": "sha512-6hJeJMOcEX8ktqjpDoJZEmld3ijvcvWBDtiXBm7f4332SiFN66QeAQI1REQshvyUoISsSeJ4PHDauKYbwao9JQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "csstype": "^3.1.0", + "seroval": "~1.5.0", + "seroval-plugins": "~1.5.0" + } + }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", diff --git a/scripts/generate_solid.bb b/scripts/generate_solid.bb new file mode 100644 index 0000000..3bf67f7 --- /dev/null +++ b/scripts/generate_solid.bb @@ -0,0 +1,273 @@ +#!/usr/bin/env bb +;; generate_solid.bb — Auto-generate Solid 1.x wrapper components from +;; BareDOM model.cljs metadata. +;; +;; Usage: bb scripts/generate_solid.bb + +;; Load shared metadata utilities +(load-file "scripts/metadata.bb") +;; Load shared codegen helpers (resolve-event-name, prop-type->ts, event-detail->ts) +(load-file "scripts/codegen_shared.bb") +;; Load shared form-control metadata (single source of truth across all adapters) +(load-file "scripts/form-control-metadata.bb") + +;; ── Configuration ─────────────────────────────────────────────────────────── +(def solid-src-dir "adapters/solid/src") +(def solid-pkg "adapters/solid/package.json") + +;; Components that support controlled mode, derived from the shared +;; form-control metadata. Identical derivation to generate_react.bb so +;; both adapters expose the same controlled-mode prop names. +(def controlled-components + (into {} + (map (fn [[tag {:keys [attr-name change-request-event value-type]}]] + (let [camel (kebab->camel attr-name)] + [tag {:control-prop camel + :default-prop (str "default" (str/capitalize camel)) + :change-request-event change-request-event + :prop-type value-type}]))) + form-controls)) + +;; ── Solid-specific helpers ────────────────────────────────────────────────── + +(defn event->solid-prop + "Convert a DOM event name to a Solid callback prop name. + Strips the tag-name prefix if present, then camelCases with `on` prefix. + Matches React's convention so users porting between adapters have the + same prop names. + e.g. 'press' -> 'onPress' + 'x-alert-dismiss' (tag 'x-alert') -> 'onDismiss' + 'value-change' -> 'onValueChange'" + [event-str tag-name] + (let [prefix (str tag-name "-") + stripped (if (str/starts-with? event-str prefix) + (subs event-str (count prefix)) + event-str) + parts (str/split stripped #"-")] + (str "on" (str/join (map str/capitalize parts))))) + +;; ── Code generation ───────────────────────────────────────────────────────── + +(defn generate-wrapper + "Generate a complete .tsx wrapper file for a component." + [{:keys [tag-name properties events string-defs]}] + (let [interface-name (tag->interface-name tag-name) + sdefs (or string-defs {}) + ctrl (get controlled-components tag-name) + ctrl-prop (when ctrl (:control-prop ctrl)) + default-prop (when ctrl (:default-prop ctrl)) + ctrl-event (when ctrl (:change-request-event ctrl)) + ctrl-type (when ctrl (:prop-type ctrl)) + writable-props (when properties + (->> properties + (remove (fn [[_ m]] (:readonly m))) + (remove (fn [[_ m]] (:read-only m))))) + event-entries (when (and events (seq events)) + (mapv (fn [[event-key event-info]] + (let [dom-name (resolve-event-name event-key event-info sdefs) + solid-prop (event->solid-prop dom-name tag-name) + detail (:detail event-info)] + {:dom-name dom-name + :solid-prop solid-prop + :detail-ts (event-detail->ts detail)})) + events)) + ;; Prop interface lines + prop-lines (concat + (when writable-props + (map (fn [[k m]] + (str " " (kebab->camel (name k)) "?: " (prop-type->ts m) ";")) + writable-props)) + (when ctrl + [(str " " default-prop "?: " ctrl-type ";")]) + (when event-entries + (map (fn [{:keys [solid-prop detail-ts]}] + (str " " solid-prop "?: (e: CustomEvent<" detail-ts ">) => void;")) + event-entries)) + [(str " ref?: " interface-name "Element | ((el: " interface-name "Element) => void);") + " children?: JSX.Element;" + " class?: string;" + " style?: JSX.CSSProperties | string;" + " id?: string;" + " slot?: string;"]) + ;; Props that splitProps takes out of the spread + split-prop-names (concat + (when ctrl [(str "\"" ctrl-prop "\"") (str "\"" default-prop "\"")]) + (map #(str "\"" (:solid-prop %) "\"") event-entries) + ["\"ref\"" "\"children\""]) + ;; Change-request entry (for controlled-mode wrapping) + change-request-entry (when ctrl + (some (fn [e] (when (= (:dom-name e) ctrl-event) e)) + event-entries)) + ;; addEventListener blocks inside onMount + event-blocks (when event-entries + (map (fn [{:keys [dom-name solid-prop detail-ts] :as entry}] + (if (and ctrl (= entry change-request-entry)) + ;; Controlled: preventDefault when control prop supplied + (str " {\n" + " const handler = (e: Event) => {\n" + " if (local." ctrl-prop " !== undefined) e.preventDefault();\n" + " local." solid-prop "?.(e as CustomEvent<" detail-ts ">);\n" + " };\n" + " el.addEventListener(\"" dom-name "\", handler);\n" + " onCleanup(() => el.removeEventListener(\"" dom-name "\", handler));\n" + " }") + ;; Plain forwarding handler — captures `local` so latest prop value is used + (str " {\n" + " const handler = (e: Event) => local." solid-prop "?.(e as CustomEvent<" detail-ts ">);\n" + " el.addEventListener(\"" dom-name "\", handler);\n" + " onCleanup(() => el.removeEventListener(\"" dom-name "\", handler));\n" + " }"))) + event-entries)) + has-events (boolean (seq event-entries)) + ;; Imports + solid-imports (cond-> ["splitProps"] + has-events (conj "onMount" "onCleanup") + (some? ctrl) (conj (if has-events "createEffect" "onMount") "createEffect")) + ;; De-dup imports + solid-imports (distinct solid-imports) + ;; Build the controlled-mode write-effect (drives DOM attribute from control prop) + ctrl-write-effect + (when ctrl + (str " createEffect(() => {\n" + " if (!el) return;\n" + " const v = local." ctrl-prop ";\n" + " if (v === undefined) return;\n" + (if (= ctrl-type "boolean") + (str " if (v) el.setAttribute(\"" ctrl-prop "\", \"\");\n" + " else el.removeAttribute(\"" ctrl-prop "\");\n") + (str " el.setAttribute(\"" ctrl-prop "\", String(v));\n")) + " });\n\n")) + ;; Build the uncontrolled default-init (runs once) + ctrl-default-init + (when ctrl + (str " onMount(() => {\n" + " if (!el || local." ctrl-prop " !== undefined || local." default-prop " === undefined) return;\n" + (if (= ctrl-type "boolean") + (str " if (local." default-prop ") el.setAttribute(\"" ctrl-prop "\", \"\");\n" + " else el.removeAttribute(\"" ctrl-prop "\");\n") + (str " el.setAttribute(\"" ctrl-prop "\", String(local." default-prop "));\n")) + " });\n\n")) + ;; Build the event-binding block (onMount with all events) + event-binding + (when has-events + (str " onMount(() => {\n" + " if (!el) return;\n" + (str/join "\n" event-blocks) "\n" + " });\n\n"))] + (str "// " tag-name ".tsx — auto-generated by generate_solid.bb, do not edit\n" + "import { " (str/join ", " solid-imports) " } from \"solid-js\";\n" + "import type { JSX } from \"solid-js\";\n" + "import type { " interface-name " as " interface-name "Element } from \"@vanelsas/baredom/" tag-name "\";\n" + "import { init } from \"@vanelsas/baredom/" tag-name "\";\n\n" + "init();\n\n" + "export interface " interface-name "Props {\n" + (str/join "\n" prop-lines) "\n" + "}\n\n" + "export function " interface-name "(props: " interface-name "Props): JSX.Element {\n" + " const [local, others] = splitProps(props, [" (str/join ", " split-prop-names) "]);\n" + " let el!: " interface-name "Element;\n\n" + " const setRef = (r: " interface-name "Element) => {\n" + " el = r;\n" + " if (typeof local.ref === \"function\") local.ref(r);\n" + " };\n\n" + (or ctrl-default-init "") + (or ctrl-write-effect "") + (or event-binding "") + " return (\n" + " <" tag-name " ref={setRef} {...others}>\n" + " {local.children}\n" + " \n" + " );\n" + "}\n"))) + +(defn generate-index + "Generate the barrel index.ts file." + [models] + (str "// index.ts — auto-generated by generate_solid.bb, do not edit\n\n" + (str/join "\n" + (map (fn [{:keys [tag-name]}] + (let [iface (tag->interface-name tag-name)] + (str "export { " iface ", type " iface "Props } from \"./" tag-name "\";"))) + (sort-by :tag-name models))) + "\n\n// Composables (hand-written)\n" + "export { useRegisterPreset, type PresetData, type TokenMap } from \"./composables\";\n")) + +(defn generate-jsx-intrinsics + "Generate a custom-elements.d.ts that registers all BareDOM tag names + in Solid's JSX.IntrinsicElements so TypeScript allows + etc. inside the wrapper bodies. Each tag is parameterised by its + specific element type so the `ref` callback gets the right type." + [models] + (let [sorted (sort-by :tag-name models) + imports (str/join "\n" + (map (fn [{:keys [tag-name]}] + (let [iface (tag->interface-name tag-name)] + (str "import type { " iface " } from \"@vanelsas/baredom/" tag-name "\";"))) + sorted)) + intrinsic-lines (str/join "\n" + (map (fn [{:keys [tag-name]}] + (let [iface (tag->interface-name tag-name)] + (str " \"" tag-name "\": JSX.HTMLAttributes<" iface "> & Record;"))) + sorted))] + (str "// custom-elements.d.ts — auto-generated by generate_solid.bb, do not edit\n" + "// Registers BareDOM custom element tag names as valid JSX intrinsic elements.\n\n" + "import \"solid-js\";\n" + imports "\n\n" + "declare module \"solid-js\" {\n" + " namespace JSX {\n" + " interface IntrinsicElements {\n" + intrinsic-lines "\n" + " }\n" + " }\n" + "}\n"))) + +;; Exports preserved when the generator rewrites package.json. +(def manual-exports + {"./composables" {:import "./dist/composables/index.js" + :types "./dist/composables/index.d.ts"}}) + +(defn update-package-exports + "Update the adapters/solid/package.json exports field. + Per-component entries point to .jsx (tsc with jsx:preserve emits .jsx); + the barrel and composables are .ts sources so they compile to .js." + [models] + (let [pkg (json/parse-string (slurp solid-pkg) true) + exports (into (sorted-map) + (concat + [["." {:import "./dist/index.js" + :types "./dist/index.d.ts"}]] + manual-exports + (map (fn [{:keys [tag-name]}] + [(str "./" tag-name) + {:import (str "./dist/" tag-name ".jsx") + :types (str "./dist/" tag-name ".d.ts")}]) + (sort-by :tag-name models)))) + updated (assoc pkg :exports exports)] + (spit solid-pkg (json/generate-string updated {:pretty true})))) + +;; ── Main ──────────────────────────────────────────────────────────────────── +(defn -main [] + (println "Generating Solid 1.x wrapper components...") + + (.mkdirs (io/file solid-src-dir)) + + (let [all-models (discover-models) + exported-names (load-package-exports) + exported-models (filter #(contains? exported-names (:tag-name %)) all-models)] + + (doseq [model exported-models] + (let [tsx-content (generate-wrapper model) + tsx-file (io/file solid-src-dir (str (:tag-name model) ".tsx"))] + (spit tsx-file tsx-content))) + + (spit (io/file solid-src-dir "index.ts") + (generate-index exported-models)) + + (spit (io/file solid-src-dir "custom-elements.d.ts") + (generate-jsx-intrinsics exported-models)) + + (update-package-exports exported-models) + + (println (str "Generated " (count exported-models) " Solid wrappers + index.ts + custom-elements.d.ts")))) + +(-main) diff --git a/scripts/pre-commit-react-adapter.sh b/scripts/pre-commit-react-adapter.sh index 5c16507..7935a0b 100755 --- a/scripts/pre-commit-react-adapter.sh +++ b/scripts/pre-commit-react-adapter.sh @@ -5,7 +5,7 @@ set -e # Only run if relevant files are staged -if git diff --cached --name-only | grep -qE '(components/.*/model\.cljs|exports/x_|generate_(react|angular|vue|svelte)\.bb|metadata\.bb|form-control-metadata\.bb|^package\.json$)'; then +if git diff --cached --name-only | grep -qE '(components/.*/model\.cljs|exports/x_|generate_(react|angular|vue|svelte|solid)\.bb|codegen_shared\.bb|metadata\.bb|form-control-metadata\.bb|^package\.json$)'; then echo "[pre-commit] Regenerating React adapter..." bb scripts/generate_react.bb || { echo "[pre-commit] Failed to generate React adapter"; exit 1; } git add adapters/react/src/ adapters/react/package.json @@ -25,4 +25,9 @@ if git diff --cached --name-only | grep -qE '(components/.*/model\.cljs|exports/ bb scripts/generate_svelte.bb || { echo "[pre-commit] Failed to generate Svelte adapter"; exit 1; } git add adapters/svelte/src/ adapters/svelte/package.json echo "[pre-commit] Svelte adapter updated" + + echo "[pre-commit] Regenerating Solid adapter..." + bb scripts/generate_solid.bb || { echo "[pre-commit] Failed to generate Solid adapter"; exit 1; } + git add adapters/solid/src/ adapters/solid/package.json + echo "[pre-commit] Solid adapter updated" fi