import type { HeadlessControllerClass } from '@42/core'; import { Accordion } from '@42/core/accordion'; import { Alert } from '@42/core/alert'; import { Avatar } from '@42/core/avatar'; import { AvatarGroup } from '@42/core/avatar-group'; import { Calendar } from '@42/core/calendar'; import { Carousel } from '@42/core/carousel'; import { Checkbox, RadioGroup, Switch } from '@42/core/choice'; import { Clipboard } from '@42/core/clipboard'; import { ColorPicker } from '@42/core/color-picker'; import { Combobox } from '@42/core/combobox'; import { CommandPalette } from '@42/core/command-palette'; import { DataView } from '@42/core/data-view'; import { DatePicker } from '@42/core/date-picker'; import { Drawer } from '@42/core/drawer'; import { Dropdown } from '@42/core/dropdown'; import { FileDropzone } from '@42/core/file-dropzone'; import { Form } from '@42/core/form'; import { Gallery } from '@42/core/gallery'; import { ImageViewer } from '@42/core/image-viewer'; import { Kanban } from '@42/core/kanban'; import { MegaMenu } from '@42/core/mega-menu'; import { Modal } from '@42/core/modal'; import { Nav } from '@42/core/nav'; import { NestedSelect } from '@42/core/nested-select'; import { Popover } from '@42/core/popover'; import { Progress } from '@42/core/progress'; import { RichTextEditor } from '@42/core/rich-text-editor'; import { Select } from '@42/core/select'; import { Skeleton } from '@42/core/skeleton'; import { Slider } from '@42/core/slider'; import { SmsEditor } from '@42/core/sms-editor'; import { SortableTable } from '@42/core/sortable-table'; import { Stepper } from '@42/core/stepper'; import { Tabs } from '@42/core/tabs'; import { TagsInput } from '@42/core/tags-input'; import { TextareaEmoji } from '@42/core/textarea-emoji'; import { TimePicker } from '@42/core/time-picker'; import { Toaster } from '@42/core/toast'; import { Tooltip } from '@42/core/tooltip'; import { Tree } from '@42/core/tree'; import { WhatsappEditor } from '@42/core/whatsapp-editor'; /** * Maps a `data-c42-` attribute selector to the `@42/core` controller that * enhances the matching markup. `mount()` walks this registry, instantiating * `new Controller(element)` for every match. * * Every entry satisfies the {@link HeadlessControllerClass} contract * (`new (root, options?)` + `on()` + `destroy()`), so a single generic loop can * drive them all with no per-component glue. * * Only controllers that enhance existing markup with sensible zero-config * defaults are auto-mountable here. Controllers that *require* runtime options * (e.g. `pagination`, whose `total` is mandatory) are intentionally excluded — * they would throw without configuration and must be wired by hand. Purely * presentational, CSS-only components (badge, card, divider, breadcrumb, * button, input-label) have no controller and are absent by design. */ // Heterogeneous registry: each value is a controller class with its own Options // type, so the generic is erased to a permissive form for assignability. // eslint-disable-next-line @typescript-eslint/no-explicit-any export const registry: Record> = { '[data-c42-accordion]': Accordion, '[data-c42-modal]': Modal, '[data-c42-tabs]': Tabs, '[data-c42-dropdown]': Dropdown, '[data-c42-drawer]': Drawer, '[data-c42-tooltip]': Tooltip, '[data-c42-carousel]': Carousel, '[data-c42-popover]': Popover, '[data-c42-select]': Select, '[data-c42-combobox]': Combobox, '[data-c42-nested-select]': NestedSelect, '[data-c42-slider]': Slider, '[data-c42-nav]': Nav, '[data-c42-mega-menu]': MegaMenu, '[data-c42-tree]': Tree, '[data-c42-stepper]': Stepper, '[data-c42-tags-input]': TagsInput, '[data-c42-clipboard]': Clipboard, '[data-c42-alert]': Alert, '[data-c42-gallery]': Gallery, '[data-c42-image-viewer]': ImageViewer, '[data-c42-color-picker]': ColorPicker, '[data-c42-date-picker]': DatePicker, '[data-c42-time-picker]': TimePicker, '[data-c42-file-dropzone]': FileDropzone, '[data-c42-command-palette]': CommandPalette, '[data-c42-sortable-table]': SortableTable, '[data-c42-data-view]': DataView, '[data-c42-progress]': Progress, '[data-c42-avatar]': Avatar, '[data-c42-avatar-group]': AvatarGroup, '[data-c42-skeleton]': Skeleton, '[data-c42-toast]': Toaster, '[data-c42-form]': Form, '[data-c42-kanban]': Kanban, '[data-c42-rich-text-editor]': RichTextEditor, '[data-c42-calendar]': Calendar, '[data-c42-textarea-emoji]': TextareaEmoji, '[data-c42-whatsapp-editor]': WhatsappEditor, '[data-c42-sms-editor]': SmsEditor, '[data-c42-checkbox]': Checkbox, '[data-c42-switch]': Switch, '[data-c42-radio-group]': RadioGroup, };