
Security News
Axios Supply Chain Attack Reaches OpenAI macOS Signing Pipeline, Forces Certificate Rotation
OpenAI rotated macOS signing certificates after a malicious Axios package reached its CI pipeline in a broader software supply chain attack.
t1-web-components
Advanced tools
High-quality dark mode component library built with Vue 3 + TypeScript + Tailwind 3
A high-quality dark mode component library built with Vue 3 + TypeScript + Tailwind 3. Features intelligent Camel Case search highlighting and premium dark aesthetics.
VC for VueComponent).text-yellow-400).# Using pnpm
pnpm install t1-web-components
Include Tailwind in your style file (ensure tailwindcss v3 is installed):
@tailwind base;
@tailwind components;
@tailwind utilities;
<script setup>
import { DropDownList, AutoComplete, JsonEditor } from 't1-web-components'
import { ref } from 'vue'
const selected = ref('')
const options = [
{ label: 'Vue.js', value: 'vue' },
{ label: 'TypeScript', value: 'ts' }
]
const jsonData = ref('[{"id":1,"name":"John"}]')
const schema = [
{ key: 'id', label: 'ID', type: 'number' as const },
{ key: 'name', label: 'Name', type: 'string' as const }
]
</script>
<template>
<div class="dark p-8 bg-gray-900 min-h-screen text-white">
<DropDownList
v-model="selected"
:options="options"
placeholder="Select an option..."
/>
<JsonEditor
v-model="jsonData"
:schema="schema"
/>
</div>
</template>
A dropdown selector that enforces selection from the provided list.
| Prop Name | Type | Default | Description |
|---|---|---|---|
modelValue | string | number | '' | Binding value (v-model) |
options | Array<{label, value}> | [] | List of options |
placeholder | string | 'Please select...' | Input placeholder text |
inputClass | string | '' | Custom CSS class for the input |
@update:modelValue: Triggered when the selected value changes.An autocomplete component that allows free-text input.
| Prop Name | Type | Default | Description |
|---|---|---|---|
modelValue | string | number | '' | Binding value (v-model) |
options | Array<string | {text, value}> | [] | List of suggestions |
placeholder | string | '' | Input placeholder text |
inputClass | string | '' | Custom CSS class for the input |
@update:modelValue: Triggered when the input or selection changes.@change: Triggered when a list item is selected, returns the item object.A dynamic JSON data editor that supports both array and object editing modes. Automatically detects the mode based on input and provides a rich editing experience.
| Prop Name | Type | Default | Description |
|---|---|---|---|
modelValue | string | null | null | Binding value (v-model) - must be a JSON string |
schema | JsonSchemaField[] | [] | Field definitions (must use as const for type) |
compact | boolean | false | Output compact format (single line) when true |
Each field in the schema must follow this structure:
interface JsonSchemaField {
key: string // Field key
label?: string // Display label (optional)
type: 'string' | 'number' | 'date' // Field type
}
Important: Use as const assertion for proper type inference:
const schema = [
{ key: 'id', label: 'ID', type: 'number' as const },
{ key: 'name', label: 'Name', type: 'string' as const },
{ key: 'createdAt', label: 'Created At', type: 'date' as const }
]
@update:modelValue: Triggered when the JSON string changes.@change: Triggered when data is modified.@error: Triggered when JSON parsing fails, returns error message.JsonEditor automatically switches between two modes based on the input:
Array Mode (input: [...])
Object Mode (input: {...})
Empty Input (input: "" or null)
Array Mode Example:
<script setup>
import { JsonEditor } from 't1-web-components'
import { ref } from 'vue'
const arrayData = ref('[{"id":1,"name":"Alice"},{"id":2,"name":"Bob"}]')
const schema = [
{ key: 'id', label: 'ID', type: 'number' as const },
{ key: 'name', label: 'Name', type: 'string' as const }
]
</script>
<template>
<JsonEditor
v-model="arrayData"
:schema="schema"
:compact="false"
/>
</template>
Object Mode Example:
<script setup>
import { JsonEditor } from 't1-web-components'
import { ref } from 'vue'
const objectData = ref('{"id":1,"name":"John","email":"john@example.com"}')
const schema = [
{ key: 'id', label: 'ID', type: 'number' as const },
{ key: 'name', label: 'Name', type: 'string' as const },
{ key: 'email', label: 'Email', type: 'string' as const }
]
</script>
<template>
<JsonEditor
v-model="objectData"
:schema="schema"
/>
</template>
Initialize from Empty:
<script setup>
import { JsonEditor } from 't1-web-components'
import { ref } from 'vue'
const data = ref('')
const schema = [
{ key: 'username', label: 'Username', type: 'string' as const },
{ key: 'age', label: 'Age', type: 'number' as const }
]
</script>
<template>
<JsonEditor
v-model="data"
:schema="schema"
/>
</template>
FAQs
High-quality dark mode component library built with Vue 3 + TypeScript + Tailwind 3
We found that t1-web-components demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
OpenAI rotated macOS signing certificates after a malicious Axios package reached its CI pipeline in a broader software supply chain attack.

Security News
Open source is under attack because of how much value it creates. It has been the foundation of every major software innovation for the last three decades. This is not the time to walk away from it.

Security News
Socket CEO Feross Aboukhadijeh breaks down how North Korea hijacked Axios and what it means for the future of software supply chain security.