{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "lcd-display",
  "title": "LCD Display",
  "description": "A themeable dot-matrix screen in a bezel, backlit in light themes and glowing in dark themes, with dropdown rows.",
  "dependencies": [
    "solid-js@^1.9.15",
    "@kobalte/core@https://github.com/jhomra21/kobalte/releases/download/kobalte-solid1-audiocn-e0e3bf095f05c7e61230a251b79181c6d834d408/kobalte-core-0.13.14-audiocn.0.e0e3bf09.tgz",
    "class-variance-authority"
  ],
  "registryDependencies": [
    "@audiocn-solid/core",
    "@audiocn-solid/select"
  ],
  "files": [
    {
      "path": "components/ui/lcd-display.tsx",
      "content": "import * as SelectPrimitive from \"@kobalte/core/select\";\nimport type { SelectItemOptions, SelectRootProps } from \"@kobalte/core/select\";\nimport { cva } from \"class-variance-authority\";\nimport {\n  Show,\n  createContext,\n  createSignal,\n  createUniqueId,\n  useContext,\n} from \"solid-js\";\n\nimport { SelectContent } from \"@/components/ui/select\";\nimport type { SelectContentProps } from \"@/components/ui/select\";\nimport { provideContext } from \"@/lib/solid/context\";\nimport { createCompatEffect } from \"@/lib/solid/effect\";\nimport type {\n  DivDOMProps,\n  JSXElement,\n  SpanDOMProps,\n} from \"@/lib/solid/jsx-types\";\nimport { omitProps } from \"@/lib/solid/props\";\nimport { setRefValue } from \"@/lib/solid/ref\";\nimport type { RefTarget } from \"@/lib/solid/ref\";\nimport { cn } from \"@/lib/utils\";\n\nexport type LcdDisplayVariant = \"primary\" | \"amber\" | \"green\" | \"cyan\" | \"red\";\n\nexport type LcdDisplaySize = \"sm\" | \"default\" | \"lg\";\n\nexport type LcdDisplayAppearance = \"auto\" | \"light\" | \"dark\";\n\nconst LIGHT_SCREEN =\n  \"[--lcd-display-bezel-edge:oklch(0.85_0.004_250)] [--lcd-display-bezel-ring:rgb(0_0_0/0.14)] [--lcd-display-bezel-shadow:inset_0_1px_0_rgb(255_255_255/0.8),0_1px_3px_rgb(0_0_0/0.18)] [--lcd-display-bezel:oklch(0.95_0.003_250)] [--lcd-display-glass:oklch(from_var(--lcd-display-ink)_0.93_calc(c*0.35)_h)] [--lcd-display-glow:color-mix(in_oklab,var(--lcd-display-lit)_22%,transparent)] [--lcd-display-lit:color-mix(in_oklab,var(--lcd-display-ink),black_62%)] [--lcd-display-recess:inset_0_1px_4px_rgb(0_0_0/0.28),inset_0_0_0_1px_rgb(0_0_0/0.2)] [--lcd-display-scanline:rgb(0_0_0/0.04)] [--lcd-display-sheen:rgb(255_255_255/0.35)]\";\n\nconst DARK_SCREEN =\n  \"[--lcd-display-bezel-edge:oklch(0.24_0.004_250)] [--lcd-display-bezel-ring:rgb(0_0_0/0.7)] [--lcd-display-bezel-shadow:inset_0_1px_0_rgb(255_255_255/0.06),0_2px_6px_rgb(0_0_0/0.5)] [--lcd-display-bezel:oklch(0.33_0.004_250)] [--lcd-display-glass:oklch(0.15_0.004_200)] [--lcd-display-glow:color-mix(in_oklab,var(--lcd-display-lit)_60%,transparent)] [--lcd-display-lit:var(--lcd-display-ink)] [--lcd-display-recess:inset_0_2px_10px_rgb(0_0_0/0.9),inset_0_0_0_1px_rgb(0_0_0/0.8)] [--lcd-display-scanline:rgb(0_0_0/0.22)] [--lcd-display-sheen:rgb(255_255_255/0.05)]\";\n\nconst DARK_SCREEN_IN_DARK_THEME =\n  \"dark:[--lcd-display-bezel-edge:oklch(0.24_0.004_250)] dark:[--lcd-display-bezel-ring:rgb(0_0_0/0.7)] dark:[--lcd-display-bezel-shadow:inset_0_1px_0_rgb(255_255_255/0.06),0_2px_6px_rgb(0_0_0/0.5)] dark:[--lcd-display-bezel:oklch(0.33_0.004_250)] dark:[--lcd-display-glass:oklch(0.15_0.004_200)] dark:[--lcd-display-glow:color-mix(in_oklab,var(--lcd-display-lit)_60%,transparent)] dark:[--lcd-display-lit:var(--lcd-display-ink)] dark:[--lcd-display-recess:inset_0_2px_10px_rgb(0_0_0/0.9),inset_0_0_0_1px_rgb(0_0_0/0.8)] dark:[--lcd-display-scanline:rgb(0_0_0/0.22)] dark:[--lcd-display-sheen:rgb(255_255_255/0.05)]\";\n\nexport const lcdDisplayVariants = cva(\n  \"[--lcd-display-font:var(--font-mono)] [--lcd-display-ink-dim:color-mix(in_oklab,var(--lcd-display-lit)_40%,transparent)] [--lcd-display-ink-unlit:color-mix(in_oklab,var(--lcd-display-lit)_7%,transparent)] [--lcd-display-pitch:2px]\",\n  {\n    defaultVariants: {\n      appearance: \"auto\",\n      size: \"default\",\n      variant: \"primary\",\n    },\n    variants: {\n      appearance: {\n        auto: `${LIGHT_SCREEN} ${DARK_SCREEN_IN_DARK_THEME}`,\n        dark: DARK_SCREEN,\n        light: LIGHT_SCREEN,\n      },\n      size: { default: \"text-lg\", lg: \"text-2xl\", sm: \"text-sm\" },\n      variant: {\n        amber: \"[--lcd-display-ink:oklch(0.76_0.13_52)]\",\n        cyan: \"[--lcd-display-ink:oklch(0.84_0.12_205)]\",\n        green: \"[--lcd-display-ink:oklch(0.85_0.19_142)]\",\n        primary: \"[--lcd-display-ink:var(--primary)]\",\n        red: \"[--lcd-display-ink:oklch(0.68_0.2_27)]\",\n      },\n    },\n  }\n);\n\n// The popup is portalled out of the display, so it copies these variables instead of inheriting them.\nconst SHARED_VARIABLES = [\n  \"--lcd-display-bezel\",\n  \"--lcd-display-bezel-edge\",\n  \"--lcd-display-font\",\n  \"--lcd-display-glass\",\n  \"--lcd-display-glow\",\n  \"--lcd-display-ink\",\n  \"--lcd-display-ink-dim\",\n  \"--lcd-display-ink-unlit\",\n  \"--lcd-display-lit\",\n  \"--lcd-display-pitch\",\n] as const;\n\ninterface DisplayContext {\n  appearance: () => LcdDisplayAppearance;\n  variant: () => LcdDisplayVariant;\n  size: () => LcdDisplaySize;\n  matrix: () => boolean;\n  scanlines: () => boolean;\n  root: () => HTMLDivElement | undefined;\n}\n\nconst DEFAULT_DISPLAY_CONTEXT: DisplayContext = {\n  appearance: (): LcdDisplayAppearance => \"auto\",\n  matrix: () => true,\n  root: () => undefined,\n  scanlines: () => true,\n  size: (): LcdDisplaySize => \"default\",\n  variant: (): LcdDisplayVariant => \"primary\",\n};\n\nconst DisplayContext = createContext<DisplayContext | null>(null);\n\nexport const useLcdDisplay = () => useContext(DisplayContext);\n\nconst RowContext = createContext<{\n  labelId: () => string;\n  setCustomId: (id: string | undefined) => void;\n}>();\n\nconst LcdScreen = (props: {\n  matrix: boolean;\n  scanlines: boolean;\n  class?: string;\n  contentClass?: string;\n  children?: JSXElement;\n}) => (\n  <div\n    class={cn(\n      \"relative isolate overflow-hidden rounded-md bg-(--lcd-display-glass) shadow-(--lcd-display-recess)\",\n      props.matrix &&\n        \"before:pointer-events-none before:absolute before:inset-0 before:bg-[radial-gradient(circle,var(--lcd-display-ink-unlit)_45%,transparent_55%)] before:bg-size-[var(--lcd-display-pitch)_var(--lcd-display-pitch)]\",\n      \"after:pointer-events-none after:absolute after:inset-0 after:bg-[linear-gradient(to_bottom,var(--lcd-display-sheen),transparent_45%)]\",\n      props.scanlines &&\n        \"after:bg-[linear-gradient(to_bottom,var(--lcd-display-sheen),transparent_45%),repeating-linear-gradient(to_bottom,transparent_0_2px,var(--lcd-display-scanline)_2px_3px)]\",\n      props.class\n    )}\n    data-slot=\"lcd-display-screen\"\n  >\n    <div class=\"drop-shadow-[0_0_3px_var(--lcd-display-glow)]\">\n      <div\n        class={cn(\n          \"relative\",\n          props.matrix &&\n            \"mask-[radial-gradient(circle,#000_58%,transparent_64%)] mask-size-[var(--lcd-display-pitch)_var(--lcd-display-pitch)]\",\n          props.contentClass\n        )}\n        data-slot=\"lcd-display-content\"\n      >\n        {props.children}\n      </div>\n    </div>\n  </div>\n);\n\nexport interface LcdDisplayProps extends Omit<DivDOMProps, \"ref\"> {\n  variant?: LcdDisplayVariant;\n  appearance?: LcdDisplayAppearance;\n  size?: LcdDisplaySize;\n  matrix?: boolean;\n  scanlines?: boolean;\n  className?: string;\n  ref?: RefTarget<HTMLDivElement>;\n}\n\nexport const LcdDisplay = (props: LcdDisplayProps) => {\n  const [root, setRoot] = createSignal<HTMLDivElement>();\n\n  const context: DisplayContext = {\n    appearance: () => props.appearance ?? \"auto\",\n    matrix: () => props.matrix ?? true,\n    root,\n    scanlines: () => props.scanlines ?? true,\n    size: () => props.size ?? \"default\",\n    variant: () => props.variant ?? \"primary\",\n  };\n\n  const rest = omitProps(props, [\n    \"appearance\",\n    \"class\",\n    \"className\",\n    \"children\",\n    \"matrix\",\n    \"ref\",\n    \"scanlines\",\n    \"size\",\n    \"variant\",\n  ]);\n\n  return provideContext(DisplayContext, context, () => (\n    <div\n      class={cn(\n        lcdDisplayVariants({\n          appearance: context.appearance(),\n          size: context.size(),\n          variant: context.variant(),\n        }),\n        \"rounded-lg bg-linear-to-b from-(--lcd-display-bezel) to-(--lcd-display-bezel-edge) p-1.5 font-(family-name:--lcd-display-font) leading-none tracking-[0.12em] uppercase shadow-(--lcd-display-bezel-shadow) ring-1 ring-(--lcd-display-bezel-ring)\",\n        props.class,\n        props.className\n      )}\n      data-appearance={context.appearance()}\n      data-matrix={context.matrix() ? \"\" : undefined}\n      data-slot=\"lcd-display\"\n      data-size={context.size()}\n      data-variant={context.variant()}\n      ref={(node) => {\n        setRoot(node);\n        setRefValue(props.ref, node);\n      }}\n      role=\"group\"\n      {...rest}\n    >\n      <LcdScreen\n        contentClass=\"flex flex-col px-4 py-2\"\n        matrix={context.matrix()}\n        scanlines={context.scanlines()}\n      >\n        {props.children}\n      </LcdScreen>\n    </div>\n  ));\n};\n\nexport const LcdDisplayRow = (props: DivDOMProps & { className?: string }) => {\n  const generatedId = createUniqueId();\n  const [customId, setCustomId] = createSignal<string>();\n  const row = { labelId: () => customId() ?? generatedId, setCustomId };\n\n  return provideContext(RowContext, row, () => (\n    <div\n      class={cn(\n        \"flex items-center justify-between gap-8 py-3\",\n        props.class,\n        props.className\n      )}\n      data-slot=\"lcd-display-row\"\n      {...omitProps(props, [\"class\", \"className\", \"children\"])}\n    >\n      {props.children}\n    </div>\n  ));\n};\n\nexport const LcdDisplayLabel = (\n  props: SpanDOMProps & { className?: string }\n) => {\n  const row = useContext(RowContext);\n  const id = () => props.id || undefined;\n  createCompatEffect(id, (id) => {\n    row?.setCustomId(id);\n\n    return () => row?.setCustomId(undefined);\n  });\n\n  return (\n    <span\n      class={cn(\"text-(--lcd-display-ink-dim)\", props.class, props.className)}\n      data-slot=\"lcd-display-label\"\n      id={id() ?? row?.labelId()}\n      {...omitProps(props, [\"class\", \"className\", \"children\", \"id\"])}\n    >\n      {props.children}\n    </span>\n  );\n};\n\nconst useFlicker = (getElement: () => HTMLElement | undefined) =>\n  createCompatEffect(getElement, (element) => {\n    if (!element) return;\n    let text = element.textContent;\n    let frame = 0;\n\n    const observer = new MutationObserver(() => {\n      if (element.textContent === text) return;\n      text = element.textContent;\n      cancelAnimationFrame(frame);\n      element.dataset.changed = \"\";\n      // Two frames: one to paint dimmed, one to start the fade back.\n      frame = requestAnimationFrame(() => {\n        frame = requestAnimationFrame(() => delete element.dataset.changed);\n      });\n    });\n\n    observer.observe(element, {\n      characterData: true,\n      childList: true,\n      subtree: true,\n    });\n\n    return () => {\n      observer.disconnect();\n      cancelAnimationFrame(frame);\n      delete element.dataset.changed;\n    };\n  });\n\nconst FLICKER =\n  \"transition-opacity duration-150 data-changed:opacity-35 data-changed:duration-0 motion-reduce:transition-none motion-reduce:data-changed:opacity-100\";\n\nexport interface LcdDisplayValueProps extends Omit<SpanDOMProps, \"ref\"> {\n  live?: boolean;\n  className?: string;\n  ref?: RefTarget<HTMLSpanElement>;\n}\n\nexport const LcdDisplayValue = (props: LcdDisplayValueProps) => {\n  const [element, setElement] = createSignal<HTMLSpanElement>();\n  useFlicker(element);\n\n  return (\n    <span\n      aria-live={props.live ? \"polite\" : undefined}\n      class={cn(\n        \"text-(--lcd-display-lit) tabular-nums\",\n        FLICKER,\n        props.class,\n        props.className\n      )}\n      data-slot=\"lcd-display-value\"\n      ref={(node) => {\n        setElement(node);\n        setRefValue(props.ref, node);\n      }}\n      {...omitProps(props, [\"class\", \"className\", \"children\", \"live\", \"ref\"])}\n    >\n      {props.children}\n    </span>\n  );\n};\n\nexport const LcdDisplaySeparator = (\n  props: DivDOMProps & { className?: string }\n) => (\n  <div\n    class={cn(\n      \"h-(--lcd-display-pitch) shrink-0 bg-[radial-gradient(circle,var(--lcd-display-ink-dim)_45%,transparent_55%)] bg-size-[calc(var(--lcd-display-pitch)*2)_var(--lcd-display-pitch)]\",\n      props.class,\n      props.className\n    )}\n    data-slot=\"lcd-display-separator\"\n    role=\"separator\"\n    {...omitProps(props, [\"class\", \"className\"])}\n  />\n);\n\nexport interface LcdDisplayStatusProps extends SpanDOMProps {\n  state?: \"idle\" | \"busy\" | \"off\";\n  className?: string;\n}\n\nexport const LcdDisplayStatus = (props: LcdDisplayStatusProps) => (\n  <span\n    aria-hidden=\"true\"\n    class={cn(\n      \"absolute right-2 bottom-2 size-1.5 animate-pulse bg-(--lcd-display-lit) data-[state=busy]:[animation-duration:0.6s] data-[state=off]:animate-none data-[state=off]:bg-(--lcd-display-ink-unlit) motion-reduce:animate-none\",\n      props.class,\n      props.className\n    )}\n    data-slot=\"lcd-display-status\"\n    data-state={props.state ?? \"idle\"}\n    {...omitProps(props, [\"class\", \"className\", \"state\"])}\n  />\n);\n\nexport interface LcdDisplayOption {\n  value: string;\n  label: string;\n  disabled?: boolean;\n}\n\nexport interface LcdDisplaySelectProps {\n  items: LcdDisplayOption[];\n  value?: string | null;\n  defaultValue?: string;\n  onValueChange?: (value: string) => void;\n  disabled?: boolean;\n  placement?: SelectRootProps<LcdDisplayOption>[\"placement\"];\n  gutter?: number;\n  children?: JSXElement;\n}\n\nexport const LcdDisplaySelect = (props: LcdDisplaySelectProps) => {\n  const [uncontrolled, setUncontrolled] = createSignal(props.defaultValue);\n\n  const current = () =>\n    props.value !== undefined ? props.value : uncontrolled();\n\n  return (\n    <SelectPrimitive.Root<LcdDisplayOption>\n      options={props.items}\n      optionValue=\"value\"\n      optionTextValue=\"label\"\n      optionDisabled={(item) => item.disabled === true}\n      placement={props.placement ?? \"bottom-end\"}\n      gutter={props.gutter ?? 8}\n      disallowEmptySelection\n      value={props.items.find((item) => item.value === current()) ?? null}\n      disabled={props.disabled}\n      onChange={(item) => {\n        if (!item) return;\n\n        if (props.value === undefined) setUncontrolled(item.value);\n        props.onValueChange?.(item.value);\n      }}\n      itemComponent={(itemProps) => (\n        <LcdDisplaySelectItem item={itemProps.item}>\n          {itemProps.item.rawValue.label}\n        </LcdDisplaySelectItem>\n      )}\n    >\n      {props.children}\n    </SelectPrimitive.Root>\n  );\n};\n\nexport interface LcdDisplaySelectTriggerProps extends Omit<\n  Parameters<typeof SelectPrimitive.Trigger>[0],\n  \"ref\"\n> {\n  placeholder?: string;\n  className?: string;\n  ref?: RefTarget<HTMLButtonElement>;\n}\n\nexport const LcdDisplaySelectTrigger = (\n  props: LcdDisplaySelectTriggerProps\n) => {\n  const row = useContext(RowContext);\n  const selection = SelectPrimitive.useSelectContext();\n  const [element, setElement] = createSignal<HTMLButtonElement>();\n  useFlicker(element);\n  const empty = () => selection.selectedOptions().length === 0;\n\n  return (\n    <SelectPrimitive.Trigger\n      aria-labelledby={row?.labelId()}\n      class={cn(\n        \"-mx-1 inline-flex items-center gap-3 rounded-sm px-1 py-0.5 text-(--lcd-display-lit) uppercase tabular-nums outline-none focus-visible:ring-1 focus-visible:ring-(--lcd-display-lit) disabled:text-(--lcd-display-ink-dim) data-placeholder:text-(--lcd-display-ink-dim)\",\n        FLICKER,\n        props.class,\n        props.className\n      )}\n      data-slot=\"lcd-display-select-trigger\"\n      data-placeholder={empty() ? \"\" : undefined}\n      ref={(node) => {\n        setElement(node);\n        setRefValue(props.ref, node);\n      }}\n      {...omitProps(props, [\n        \"class\",\n        \"className\",\n        \"children\",\n        \"placeholder\",\n        \"ref\",\n      ])}\n    >\n      {props.children ?? (\n        <Show\n          fallback={\n            <SelectPrimitive.Value<LcdDisplayOption>>\n              {(state) => state.selectedOption()?.label}\n            </SelectPrimitive.Value>\n          }\n          when={empty()}\n        >\n          {props.placeholder}\n        </Show>\n      )}\n      <SelectPrimitive.Icon\n        aria-hidden=\"true\"\n        class=\"transition-transform duration-150 data-expanded:rotate-180 motion-reduce:transition-none\"\n      >\n        <svg\n          class=\"h-1.5 w-2.5 shrink-0 [shape-rendering:crispEdges]\"\n          fill=\"currentColor\"\n          viewBox=\"0 0 5 3\"\n        >\n          <path d=\"M0 0h1v1H0zM4 0h1v1H4zM1 1h1v1H1zM3 1h1v1H3zM2 2h1v1H2z\" />\n        </svg>\n      </SelectPrimitive.Icon>\n    </SelectPrimitive.Trigger>\n  );\n};\n\nexport interface LcdDisplaySelectContentProps extends Omit<\n  SelectContentProps,\n  \"children\" | \"ref\"\n> {\n  ref?: RefTarget<HTMLDivElement>;\n}\n\nexport const LcdDisplaySelectContent = (\n  props: LcdDisplaySelectContentProps\n) => {\n  const context = useLcdDisplay() ?? DEFAULT_DISPLAY_CONTEXT;\n\n  return (\n    <SelectContent\n      class={cn(\n        lcdDisplayVariants({\n          appearance: context.appearance(),\n          size: context.size(),\n          variant: context.variant(),\n        }),\n        \"min-w-(--kb-popper-anchor-width) rounded-md bg-(--lcd-display-bezel-edge) p-1 font-(family-name:--lcd-display-font) leading-none tracking-[0.12em] text-(--lcd-display-ink-dim) uppercase shadow-xl ring-1 ring-(--lcd-display-bezel-ring) outline-none before:hidden dark:ring-(--lcd-display-bezel-ring) [&_[role=listbox]]:max-h-[calc(var(--kb-popper-content-available-height)-1rem)] [&_[role=listbox]]:overflow-y-auto\",\n        props.class,\n        props.className\n      )}\n      data-appearance={context.appearance()}\n      data-slot=\"lcd-display-select-content\"\n      data-variant={context.variant()}\n      ref={(node) => {\n        // The popup is portalled out of the display, so copy the shared variables it cannot inherit.\n        const root = context.root();\n\n        if (root) {\n          const style = getComputedStyle(root);\n\n          for (const name of SHARED_VARIABLES) {\n            const value = style.getPropertyValue(name);\n\n            if (value) node.style.setProperty(name, value);\n          }\n        }\n\n        setRefValue(props.ref, node);\n      }}\n      {...omitProps(props, [\"class\", \"className\", \"ref\"])}\n    >\n      <LcdScreen\n        contentClass=\"p-1\"\n        matrix={context.matrix()}\n        scanlines={context.scanlines()}\n      >\n        <SelectPrimitive.Listbox />\n      </LcdScreen>\n    </SelectContent>\n  );\n};\n\nconst LcdDisplaySelectItem = (\n  props: Parameters<typeof SelectPrimitive.Item>[0] &\n    SelectItemOptions & { className?: string }\n) => (\n  <SelectPrimitive.Item\n    item={props.item}\n    class={cn(\n      \"flex cursor-default items-center gap-2 rounded-sm px-2 py-2 text-(--lcd-display-ink-dim) outline-none select-none data-disabled:opacity-40 data-highlighted:bg-(--lcd-display-lit) data-highlighted:text-(--lcd-display-glass) data-selected:text-(--lcd-display-lit) data-selected:data-highlighted:text-(--lcd-display-glass)\",\n      props.class,\n      props.className\n    )}\n    data-slot=\"lcd-display-select-item\"\n    {...omitProps(props, [\"class\", \"className\", \"children\", \"item\"])}\n  >\n    <span class=\"size-1.5 shrink-0\">\n      <SelectPrimitive.ItemIndicator\n        class=\"block size-full\"\n        data-slot=\"lcd-display-select-indicator\"\n      >\n        <span class=\"block size-full bg-current\" />\n      </SelectPrimitive.ItemIndicator>\n    </span>\n    <SelectPrimitive.ItemLabel>{props.children}</SelectPrimitive.ItemLabel>\n  </SelectPrimitive.Item>\n);\n",
      "type": "registry:ui"
    },
    {
      "path": "lib/audiocn-license.txt",
      "content": "Audio component source adapted from https://github.com/audiocn/ui.\nMIT License — Copyright (c) 2026 OrcDev\n\nRegular SVG icon geometry adapted from @phosphor-icons/react 2.1.10.\nMIT License — Copyright (c) 2020 Phosphor Icons\n\nThe following permission and warranty terms apply to both notices.\nRetain this file with copies or substantial portions of the source.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n",
      "type": "registry:file",
      "target": "@lib/audiocn-license.txt"
    }
  ],
  "type": "registry:ui"
}
