// AUTO-GENERATED by scripts/generate-react-bindings.mjs — do not edit by hand. Source: src/web-components/components.config.ts
//
// Shipped type declarations for the `./web-components` entry point.
// Shape constraints (and why each one is load-bearing) are documented at
// renderWebComponentsDts in scripts/lib/react-binding-templates.mjs.

/**
 * Anything a framework can render as element content. Deliberately `unknown`
 * rather than React's own node type — see constraint 1 in the generator header.
 *
 * (Phrased without a dotted reference on purpose: "no React-dot anywhere in this
 * file" is then a clean mechanical check, not one that trips over its own prose.)
 */
export type TvuNode = unknown

/**
 * Attributes accepted by every `<tvu-*>` element in JSX, on top of its own props.
 *
 * ⛔ Never add a bare `[key: string]` index signature here. It would make every
 * misspelling and every out-of-union value (`size="XXL"`) type-check, which turns
 * the whole augmentation into a green light that checks nothing — constraint 4 in
 * the generator header. The two signatures below are deliberately narrow
 * template-literal forms: they match only `aria-*` / `data-*` keys, so a named
 * prop like `size` is still checked against its union.
 */
export interface TvuElementAttributes {
  key?: string | number
  ref?: unknown
  id?: string
  class?: string
  className?: string
  slot?: string
  style?: unknown
  title?: string
  hidden?: boolean
  tabIndex?: number
  [ariaAttr: `aria-${string}`]: unknown
  [dataAttr: `data-${string}`]: unknown
}

export type ButtonColor = 'gray 1' | 'green' | 'orange' | 'red' | 'blue'
export type ButtonFixedWidth = 'no' | 'yes'
export type ButtonIcon = 'left' | 'light' | 'loading' | 'loading button' | 'no' | 'right'
export type ButtonRadius = 'round' | 'square'
export type ButtonSize = 'XS' | 'S' | 'M' | 'L'
export type ButtonStatus = 'default' | 'disable' | 'hover' | 'loading'
export type ButtonFill = 'filling' | 'ghost' | 'rimless'
export type ButtonTheme = 'dark' | 'light'
export interface ButtonProps {
  color?: ButtonColor
  fixedWidth?: ButtonFixedWidth
  icon?: ButtonIcon
  radius?: ButtonRadius
  size?: ButtonSize
  status?: ButtonStatus
  /**
   * Appearance/fill variant enum (filling/ghost/rimless).
   */
  fill?: ButtonFill
  theme?: ButtonTheme
  onClick?: (e: Event) => void
  children?: TvuNode
}
/** HTML-attribute spellings for `<tvu-button>` (see attrAliasLines). */
export interface ButtonAttributes {
  'fixed-width'?: ButtonFixedWidth
}

export type InputDarkTheme = 'on' | 'off'
export type InputStatus = 'Placeholder' | 'Value' | 'Filled'
export type InputEnable = 'on' | 'off'
export type InputUx = 'default' | 'error' | 'click' | 'hover'
export type InputSize = 'M' | 'L' | 'XL'
export type InputFeature = 'no' | 'yes' | 'text count'
export interface InputProps {
  value?: string
  onChange?: (value: string) => void
  placeholder?: string
  darkTheme?: InputDarkTheme
  status?: InputStatus
  enable?: InputEnable
  ux?: InputUx
  size?: InputSize
  feature?: InputFeature
  readonly?: boolean
}
/** HTML-attribute spellings for `<tvu-input>` (see attrAliasLines). */
export interface InputAttributes {
  'dark-theme'?: InputDarkTheme
}

export type FormItemLabelWidth = '120 px' | '200 px' | 'Dynamic'
export type FormItemLayout = '1 line' | '1 line & Right' | '2 lines'
export type FormItemStatus = 'Error' | 'Normal'
export type FormItemTheme = 'Dark' | 'Light'
export type FormItemType = 'Label & checkbox' | 'Label & Input' | 'Label & Radio' | 'Label & Selector' | 'Label & Switch' | 'Label & Textarea'
export type FormItemRules = unknown
export interface FormItemProps {
  label?: string
  required?: boolean
  error?: string
  hint?: string
  labelWidth?: FormItemLabelWidth
  layout?: FormItemLayout
  status?: FormItemStatus
  theme?: FormItemTheme
  type?: FormItemType
  prop?: string
  rules?: FormItemRules
  children?: TvuNode
}
/** HTML-attribute spellings for `<tvu-form-item>` (see attrAliasLines). */
export interface FormItemAttributes {
  'label-width'?: FormItemLabelWidth
}

export type FormModel = Record<string, unknown>
export type FormRules = unknown
export type FormLabelWidth = '120 px' | '200 px' | 'Dynamic'
export type FormLayout = '1 line' | '1 line & Right' | '2 lines'
export interface FormProps {
  model?: FormModel
  rules?: FormRules
  labelWidth?: FormLabelWidth
  layout?: FormLayout
  disabled?: boolean
  children?: TvuNode
}
/** HTML-attribute spellings for `<tvu-form>` (see attrAliasLines). */
export interface FormAttributes {
  'label-width'?: FormLabelWidth
}

export type BadgeColor = 'Neutral' | 'Blue' | 'Green' | 'Orange' | 'Red'
export type BadgeFill = 'Filled' | 'Line'
export type BadgeType = 'Circle' | 'Rectangle'
export interface BadgeProps {
  color?: BadgeColor
  fill?: BadgeFill
  type?: BadgeType
  children?: TvuNode
}

export type PillStatusStatus = 'On-air' | 'Preview' | 'Analyzing' | 'Inactive'
export type PillStatusCount = number | string
export interface PillStatusProps {
  status?: PillStatusStatus
  active?: boolean
  count?: PillStatusCount
  children?: TvuNode
}

export type ProgressSize = 'M' | 'S'
export type ProgressStatus = 'default' | 'error' | 'success' | 'warning'
export type ProgressTheme = 'dark' | 'light'
export interface ProgressProps {
  size?: ProgressSize
  status?: ProgressStatus
  theme?: ProgressTheme
  value?: number
  showLabel?: boolean
}
/** HTML-attribute spellings for `<tvu-progress>` (see attrAliasLines). */
export interface ProgressAttributes {
  'show-label'?: boolean
}

export interface RatingProps {
  value?: '1' | '2' | '3' | '4' | '5'
  onChange?: (value: '1' | '2' | '3' | '4' | '5') => void
  readonly?: boolean
}

export type BreadcrumbItemSeparatorType = 'arrow' | 'slash'
export type BreadcrumbItemState = 'current' | 'Default' | 'disabled' | 'hover'
export interface BreadcrumbItemProps {
  href?: string
  showSeparator?: boolean
  separatorType?: BreadcrumbItemSeparatorType
  state?: BreadcrumbItemState
  children?: TvuNode
}
/** HTML-attribute spellings for `<tvu-breadcrumb-item>` (see attrAliasLines). */
export interface BreadcrumbItemAttributes {
  'show-separator'?: boolean
  'separator-type'?: BreadcrumbItemSeparatorType
}

export type TopBarTag = 'After Login' | 'Before Login'
export interface TopBarProps {
  tag?: TopBarTag
  title?: string
  showMenu?: boolean
  showSearchBox?: boolean
  /** Projects into the `logo` slot. */
  logo?: TvuNode
  /** Projects into the `left` slot. */
  left?: TvuNode
  /** Projects into the `search` slot. */
  search?: TvuNode
  /** Projects into the `menu` slot. */
  menu?: TvuNode
  /** Projects into the `right-content` slot. */
  rightContent?: TvuNode
  children?: TvuNode
}
/** HTML-attribute spellings for `<tvu-top-bar>` (see attrAliasLines). */
export interface TopBarAttributes {
  'show-menu'?: boolean
  'show-search-box'?: boolean
}

export type SwitchDarkTheme = 'on' | 'off'
export type SwitchEnable = 'yes' | 'no'
export type SwitchLoading = 'yes' | 'no'
export interface SwitchProps {
  status?: 'off' | 'on' | 'live'
  onStatusChange?: (status: 'off' | 'on' | 'live') => void
  darkTheme?: SwitchDarkTheme
  enable?: SwitchEnable
  loading?: SwitchLoading
}
/** HTML-attribute spellings for `<tvu-switch>` (see attrAliasLines). */
export interface SwitchAttributes {
  'dark-theme'?: SwitchDarkTheme
}

export type CheckBoxDarkTheme = 'on' | 'off'
export type CheckBoxEnable = 'yes' | 'no'
export interface CheckBoxProps {
  status?: 'off' | 'on' | 'some'
  onStatusChange?: (status: 'off' | 'on' | 'some') => void
  darkTheme?: CheckBoxDarkTheme
  enable?: CheckBoxEnable
  readonly?: boolean
  children?: TvuNode
}
/** HTML-attribute spellings for `<tvu-check-box>` (see attrAliasLines). */
export interface CheckBoxAttributes {
  'dark-theme'?: CheckBoxDarkTheme
}

export type RadioDarkTheme = 'on' | 'off'
export type RadioEnable = 'yes' | 'no'
export interface RadioProps {
  status?: 'off' | 'on'
  onStatusChange?: (status: 'off' | 'on') => void
  darkTheme?: RadioDarkTheme
  enable?: RadioEnable
  children?: TvuNode
}
/** HTML-attribute spellings for `<tvu-radio>` (see attrAliasLines). */
export interface RadioAttributes {
  'dark-theme'?: RadioDarkTheme
}

export type PillCounterKind = 'success' | 'warning' | 'info' | 'neutral'
export interface PillCounterProps {
  kind?: PillCounterKind
  children?: TvuNode
}

export interface BreadcrumbProps {
  children?: TvuNode
}

export type InputBoxFilledDarkTheme = 'on' | 'off'
export type InputBoxFilledStatus = 'Placeholder' | 'Value'
export type InputBoxFilledEnable = 'on' | 'off'
export type InputBoxFilledUx = 'default' | 'error' | 'click' | 'hover'
export type InputBoxFilledSize = 'M' | 'L' | 'XL'
export type InputBoxFilledFeature = 'no' | 'yes' | 'text count'
export interface InputBoxFilledProps {
  value?: string
  onChange?: (value: string) => void
  placeholder?: string
  darkTheme?: InputBoxFilledDarkTheme
  status?: InputBoxFilledStatus
  enable?: InputBoxFilledEnable
  ux?: InputBoxFilledUx
  size?: InputBoxFilledSize
  feature?: InputBoxFilledFeature
  readonly?: boolean
}
/** HTML-attribute spellings for `<tvu-input-box-filled>` (see attrAliasLines). */
export interface InputBoxFilledAttributes {
  'dark-theme'?: InputBoxFilledDarkTheme
}

export type InputNumberType = 'Default' | 'Only Add' | 'Only Reduce' | 'Readonly'
export interface InputNumberProps {
  value?: number
  onChange?: (value: number) => void
  type?: InputNumberType
  min?: number
  max?: number
  step?: number
  disabled?: boolean
}

export type SliderSize = 'M' | 'S'
export type SliderTheme = 'dark' | 'light'
export interface SliderProps {
  value?: number
  onChange?: (value: number) => void
  size?: SliderSize
  theme?: SliderTheme
  min?: number
  max?: number
  step?: number
  disabled?: boolean
  showValue?: boolean
}
/** HTML-attribute spellings for `<tvu-slider>` (see attrAliasLines). */
export interface SliderAttributes {
  'show-value'?: boolean
}

export type PaginationType = 'Classic' | 'Simple' | 'Small'
export interface PaginationProps {
  value?: number
  onChange?: (value: number) => void
  type?: PaginationType
  total?: number
  pageSize?: number
  onPageSizeChange?: (value: number) => void
}
/** HTML-attribute spellings for `<tvu-pagination>` (see attrAliasLines). */
export interface PaginationAttributes {
  'page-size'?: number
}

export type TabFill = 'Line' | 'Text' | 'Filled' | 'line' | 'text' | 'filled'
export type TabColor = 'White' | 'Green' | 'white' | 'green'
export interface TabProps {
  value?: string | number
  onChange?: (value: string | number) => void
  fill?: TabFill
  color?: TabColor
  children?: TvuNode
}

export type TabListItems = { label: string; value: string | number; disabled?: boolean }[]
export type TabListFill = 'Line' | 'Text' | 'Filled' | 'line' | 'text' | 'filled'
export interface TabListProps {
  value?: string | number
  onChange?: (value: string | number) => void
  items?: TabListItems
  fill?: TabListFill
  children?: TvuNode
}

export type TabItemState = 'Normal' | 'Active' | 'normal' | 'active'
export type TabItemColor = 'White' | 'Green' | 'white' | 'green'
export type TabItemFill = 'Line' | 'Text' | 'Filled' | 'line' | 'text' | 'filled'
export type TabItemValue = string | number
export interface TabItemProps {
  disabled?: boolean
  state?: TabItemState
  color?: TabItemColor
  fill?: TabItemFill
  value?: TabItemValue
  children?: TvuNode
}

export type StepsDirection = 'horizontal' | 'vertical'
export type StepsType = 'number' | 'icon'
export interface StepsProps {
  active?: number
  current?: number
  direction?: StepsDirection
  type?: StepsType
  children?: TvuNode
}

export type StepItemDirection = 'horizontal' | 'vertical'
export type StepItemState = 'pending' | 'active' | 'completed'
export type StepItemType = 'number' | 'icon'
export interface StepItemProps {
  current?: number
  description?: string
  direction?: StepItemDirection
  iconName?: string
  index?: number
  showLeadingConnector?: boolean
  showTrailingConnector?: boolean
  state?: StepItemState
  type?: StepItemType
  title?: string
}
/** HTML-attribute spellings for `<tvu-step-item>` (see attrAliasLines). */
export interface StepItemAttributes {
  'icon-name'?: string
  'show-leading-connector'?: boolean
  'show-trailing-connector'?: boolean
}

export type PopupBoxTheme = 'dark' | 'light'
export type PopupBoxWidth = string | number
export interface PopupBoxProps {
  visible?: boolean
  onVisibleChange?: (visible: boolean) => void
  theme?: PopupBoxTheme
  title?: string
  width?: PopupBoxWidth
  closable?: boolean
  closeOnBackdrop?: boolean
  closeOnEscape?: boolean
  showFooter?: boolean
  cancelText?: string
  confirmText?: string
  onClose?: () => void
  onCancel?: () => void
  onConfirm?: () => void
  /** Projects into the `footer` slot. */
  footer?: TvuNode
  children?: TvuNode
}
/** HTML-attribute spellings for `<tvu-popup-box>` (see attrAliasLines). */
export interface PopupBoxAttributes {
  'close-on-backdrop'?: boolean
  'close-on-escape'?: boolean
  'show-footer'?: boolean
  'cancel-text'?: string
  'confirm-text'?: string
}

export type SelectBoxLineOptions = { label: string; value: string | number }[]
export type SelectBoxLineDarkTheme = 'on' | 'off'
export type SelectBoxLineStatus = 'Placeholder' | 'Value' | 'multi select'
export type SelectBoxLineEnable = 'on' | 'off'
export type SelectBoxLineUx = 'default' | 'error' | 'hover' | 'click' | 'editable'
export type SelectBoxLineSize = 'M' | 'L'
export type SelectBoxLineFeature = 'default' | 'time' | 'date'
export interface SelectBoxLineProps {
  value?: string | number | Array<string | number>
  onChange?: (value: string | number | Array<string | number>) => void
  placeholder?: string
  options?: SelectBoxLineOptions
  darkTheme?: SelectBoxLineDarkTheme
  status?: SelectBoxLineStatus
  enable?: SelectBoxLineEnable
  ux?: SelectBoxLineUx
  size?: SelectBoxLineSize
  feature?: SelectBoxLineFeature
  multiple?: boolean
  editable?: boolean
}
/** HTML-attribute spellings for `<tvu-select-box-line>` (see attrAliasLines). */
export interface SelectBoxLineAttributes {
  'dark-theme'?: SelectBoxLineDarkTheme
}

export type SelectBoxFilledOptions = { label: string; value: string | number }[]
export type SelectBoxFilledDarkTheme = 'on' | 'off'
export type SelectBoxFilledStatus = 'Placeholder' | 'Value' | 'multi select'
export type SelectBoxFilledEnable = 'on' | 'off'
export type SelectBoxFilledUx = 'default' | 'error' | 'hover' | 'click' | 'editable'
export type SelectBoxFilledSize = 'M' | 'L'
export type SelectBoxFilledFeature = 'default' | 'time' | 'date'
export interface SelectBoxFilledProps {
  value?: string | number | Array<string | number>
  onChange?: (value: string | number | Array<string | number>) => void
  placeholder?: string
  options?: SelectBoxFilledOptions
  darkTheme?: SelectBoxFilledDarkTheme
  status?: SelectBoxFilledStatus
  enable?: SelectBoxFilledEnable
  ux?: SelectBoxFilledUx
  size?: SelectBoxFilledSize
  feature?: SelectBoxFilledFeature
  multiple?: boolean
  editable?: boolean
}
/** HTML-attribute spellings for `<tvu-select-box-filled>` (see attrAliasLines). */
export interface SelectBoxFilledAttributes {
  'dark-theme'?: SelectBoxFilledDarkTheme
}

export type DropDownListSelectDarkTheme = 'on' | 'off'
export type DropDownListSelectType = 'Radio' | 'Multi' | 'Operation List' | 'Sort By'
export type DropDownListSelectItems = { label: string; value: string; checked: boolean; active: boolean; disabled: boolean }[]
export interface DropDownListSelectProps {
  darkTheme?: DropDownListSelectDarkTheme
  type?: DropDownListSelectType
  items?: DropDownListSelectItems
  listboxId?: string
  onSelect?: (value: string | number | undefined) => void
  onClose?: () => void
}
/** HTML-attribute spellings for `<tvu-drop-down-list-select>` (see attrAliasLines). */
export interface DropDownListSelectAttributes {
  'dark-theme'?: DropDownListSelectDarkTheme
  'listbox-id'?: string
}

export type TooltipDarkTheme = 'off' | 'on'
export type TooltipPointing = 'Center down' | 'Center up' | 'left down' | 'left up' | 'right down' | 'right up'
export interface TooltipProps {
  darkTheme?: TooltipDarkTheme
  pointing?: TooltipPointing
  content?: string
  disabled?: boolean
  open?: boolean
  children?: TvuNode
}
/** HTML-attribute spellings for `<tvu-tooltip>` (see attrAliasLines). */
export interface TooltipAttributes {
  'dark-theme'?: TooltipDarkTheme
}

export type NotificationForm = 'dialog' | 'alert' | 'pop confirm' | 'slide'
export type NotificationType = 'warning' | 'danger' | 'error' | 'info' | 'success' | 'default'
export type NotificationTheme = 'dark' | 'light'
export interface NotificationProps {
  form?: NotificationForm
  type?: NotificationType
  theme?: NotificationTheme
  title?: string
  description?: string
  closable?: boolean
  cancelText?: string
  confirmText?: string
  okText?: string
  onClose?: () => void
  onCancel?: () => void
  onConfirm?: () => void
}
/** HTML-attribute spellings for `<tvu-notification>` (see attrAliasLines). */
export interface NotificationAttributes {
  'cancel-text'?: string
  'confirm-text'?: string
  'ok-text'?: string
}

export type MessageStatus = 'success' | 'info' | 'error' | 'warning'
export type MessageSize = 'M' | 'L'
export interface MessageProps {
  status?: MessageStatus
  size?: MessageSize
  closable?: boolean
}

export type TableAlign = 'Center' | 'Left' | 'Right'
export type TableType = 'Header' | 'Tbody'
export type TableColumns = readonly { key: string; title: string; align?: 'left' | 'center' | 'right'; width?: string | number; showLeftIcon?: boolean; leftIconName?: string; showRightIcon?: boolean; rightIconName?: string; sortOrder?: 'asc' | 'desc' | null; cell?: { kind: 'text' } | { kind: 'pill'; map?: Record<string, { status?: 'On-air' | 'Preview' | 'Analyzing' | 'Inactive'; active?: boolean; label?: string }> } | { kind: 'button'; label?: string; actionKey?: string; color?: 'gray 1' | 'green' | 'orange' | 'red' | 'blue'; fill?: 'filling' | 'ghost' | 'rimless'; size?: 'L' | 'M' | 'S' | 'XS'; iconName?: string } | { kind: 'actions'; items: { label?: string; actionKey: string; color?: 'gray 1' | 'green' | 'orange' | 'red' | 'blue'; fill?: 'filling' | 'ghost' | 'rimless'; size?: 'L' | 'M' | 'S' | 'XS'; iconName?: string }[] } | { kind: 'link'; href?: string; hrefKey?: string; label?: string; actionKey?: string } | { kind: 'icon'; name?: string; map?: Record<string, string> } }[]
export type TableData = Record<string, unknown>[]
export type TableSelectedKeys = (string | number)[]
export interface TableProps {
  align?: TableAlign
  type?: TableType
  columns?: TableColumns
  data?: TableData
  striped?: boolean
  loading?: boolean
  rowKey?: string
  selectedKeys?: TableSelectedKeys
  /** Projects into the `empty` slot. */
  empty?: TvuNode
  children?: TvuNode
}
/** HTML-attribute spellings for `<tvu-table>` (see attrAliasLines). */
export interface TableAttributes {
  'row-key'?: string
  'selected-keys'?: TableSelectedKeys
}

export type ChartType = 'pie' | 'donut' | 'line' | 'bar' | 'bar-horizontal' | 'line-bar'
export type ChartDatasets = { label: string; data: number[]; type?: 'line' | 'bar'; color?: string }[]
export type ChartLabels = string[]
export interface ChartProps {
  type?: ChartType
  datasets?: ChartDatasets
  labels?: ChartLabels
  height?: number
  width?: number
}

export type LogoType = 'tvu' | 'ts'
export interface LogoProps {
  type?: LogoType
  size?: number
}

export type MenuListItems = { label: string; value?: string | number; icon?: string; badge?: string | number | { label?: string | number; color?: 'Neutral' | 'Blue' | 'Green' | 'Orange' | 'Red'; fill?: 'Filled' | 'Line'; type?: 'Circle' | 'Rectangle' }; active?: boolean; disabled?: boolean }[]
export type MenuListOrientation = 'horizontal' | 'vertical'
export interface MenuListProps {
  items?: MenuListItems
  orientation?: MenuListOrientation
  onSelect?: (value: string | number) => void
}

export type UserMenuActions = { label: string; value?: string | number; icon?: string; active?: boolean; disabled?: boolean }[]
export type UserMenuLanguages = { label: string; value: string }[]
export interface UserMenuProps {
  name?: string
  email?: string
  role?: string
  image?: string
  color?: string
  actions?: UserMenuActions
  languages?: UserMenuLanguages
  lang?: string
  onAction?: (value: string | number) => void
  onLanguageChange?: (value: string) => void
  onSignOut?: () => void
  /** Projects into the `panel-top` slot. */
  panelTop?: TvuNode
  /** Projects into the `badge` slot. */
  badge?: TvuNode
  children?: TvuNode
}

export interface IconProps {
  name?: string
  size?: number
  color?: string
}

/**
 * The custom-element constructors, as registered by `registerTvuElements()`.
 * Importing this entry point already registers them as a side effect.
 */
export declare const TvuButton: CustomElementConstructor
export declare const TvuInput: CustomElementConstructor
export declare const TvuFormItem: CustomElementConstructor
export declare const TvuForm: CustomElementConstructor
export declare const TvuBadge: CustomElementConstructor
export declare const TvuPillStatus: CustomElementConstructor
export declare const TvuProgress: CustomElementConstructor
export declare const TvuRating: CustomElementConstructor
export declare const TvuBreadcrumbItem: CustomElementConstructor
export declare const TvuTopBar: CustomElementConstructor
export declare const TvuSwitch: CustomElementConstructor
export declare const TvuCheckBox: CustomElementConstructor
export declare const TvuRadio: CustomElementConstructor
export declare const TvuPillCounter: CustomElementConstructor
export declare const TvuBreadcrumb: CustomElementConstructor
export declare const TvuInputBoxFilled: CustomElementConstructor
export declare const TvuInputNumber: CustomElementConstructor
export declare const TvuSlider: CustomElementConstructor
export declare const TvuPagination: CustomElementConstructor
export declare const TvuTab: CustomElementConstructor
export declare const TvuTabList: CustomElementConstructor
export declare const TvuTabItem: CustomElementConstructor
export declare const TvuSteps: CustomElementConstructor
export declare const TvuStepItem: CustomElementConstructor
export declare const TvuPopupBox: CustomElementConstructor
export declare const TvuSelectBoxLine: CustomElementConstructor
export declare const TvuSelectBoxFilled: CustomElementConstructor
export declare const TvuDropDownListSelect: CustomElementConstructor
export declare const TvuTooltip: CustomElementConstructor
export declare const TvuNotification: CustomElementConstructor
export declare const TvuMessage: CustomElementConstructor
export declare const TvuTable: CustomElementConstructor
export declare const TvuChart: CustomElementConstructor
export declare const TvuLogo: CustomElementConstructor
export declare const TvuMenuList: CustomElementConstructor
export declare const TvuUserMenu: CustomElementConstructor
export declare const TvuIcon: CustomElementConstructor

/** Registers every `<tvu-*>` element. Idempotent; runs on import. */
export declare function registerTvuElements(): void

/** tag → accepted attributes. Emitted once; both augmentations below extend it. */
export interface TvuIntrinsicElements {
  'tvu-button': ButtonProps & ButtonAttributes & TvuElementAttributes
  'tvu-input': InputProps & InputAttributes & TvuElementAttributes
  'tvu-form-item': FormItemProps & FormItemAttributes & TvuElementAttributes
  'tvu-form': FormProps & FormAttributes & TvuElementAttributes
  'tvu-badge': BadgeProps & TvuElementAttributes
  'tvu-pill-status': PillStatusProps & TvuElementAttributes
  'tvu-progress': ProgressProps & ProgressAttributes & TvuElementAttributes
  'tvu-rating': RatingProps & TvuElementAttributes
  'tvu-breadcrumb-item': BreadcrumbItemProps & BreadcrumbItemAttributes & TvuElementAttributes
  'tvu-top-bar': TopBarProps & TopBarAttributes & TvuElementAttributes
  'tvu-switch': SwitchProps & SwitchAttributes & TvuElementAttributes
  'tvu-check-box': CheckBoxProps & CheckBoxAttributes & TvuElementAttributes
  'tvu-radio': RadioProps & RadioAttributes & TvuElementAttributes
  'tvu-pill-counter': PillCounterProps & TvuElementAttributes
  'tvu-breadcrumb': BreadcrumbProps & TvuElementAttributes
  'tvu-input-box-filled': InputBoxFilledProps & InputBoxFilledAttributes & TvuElementAttributes
  'tvu-input-number': InputNumberProps & TvuElementAttributes
  'tvu-slider': SliderProps & SliderAttributes & TvuElementAttributes
  'tvu-pagination': PaginationProps & PaginationAttributes & TvuElementAttributes
  'tvu-tab': TabProps & TvuElementAttributes
  'tvu-tab-list': TabListProps & TvuElementAttributes
  'tvu-tab-item': TabItemProps & TvuElementAttributes
  'tvu-steps': StepsProps & TvuElementAttributes
  'tvu-step-item': StepItemProps & StepItemAttributes & TvuElementAttributes
  'tvu-popup-box': PopupBoxProps & PopupBoxAttributes & TvuElementAttributes
  'tvu-select-box-line': SelectBoxLineProps & SelectBoxLineAttributes & TvuElementAttributes
  'tvu-select-box-filled': SelectBoxFilledProps & SelectBoxFilledAttributes & TvuElementAttributes
  'tvu-drop-down-list-select': DropDownListSelectProps & DropDownListSelectAttributes & TvuElementAttributes
  'tvu-tooltip': TooltipProps & TooltipAttributes & TvuElementAttributes
  'tvu-notification': NotificationProps & NotificationAttributes & TvuElementAttributes
  'tvu-message': MessageProps & TvuElementAttributes
  'tvu-table': TableProps & TableAttributes & TvuElementAttributes
  'tvu-chart': ChartProps & TvuElementAttributes
  'tvu-logo': LogoProps & TvuElementAttributes
  'tvu-menu-list': MenuListProps & TvuElementAttributes
  'tvu-user-menu': UserMenuProps & TvuElementAttributes
  'tvu-icon': IconProps & TvuElementAttributes
}

// @types/react >= 18.3 (and all of 19.x) resolve JSX through the `react` module.
declare module 'react' {
  namespace JSX {
    interface IntrinsicElements extends TvuIntrinsicElements {}
  }
}

// @types/react <= 18.2 only has the global JSX namespace.
// ⛔ Both blocks are required — see constraint 2 in the generator header.
declare global {
  namespace JSX {
    interface IntrinsicElements extends TvuIntrinsicElements {}
  }
}
