@ttdk-design-system/library-react 0.0.0-stage → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AI_GUIDE.md +6518 -0
- package/llms.txt +6518 -0
- package/package.json +1098 -4
- package/src/core/index.ts +2 -0
- package/src/core/tailwind-preset.cjs +62 -0
- package/src/core/tailwind-preset.ts +85 -0
- package/src/core/theme/tokens.css +663 -0
- package/src/core/types.ts +836 -0
- package/src/index.ts +17 -0
- package/src/tailwind-preset.cjs +62 -0
- package/src/tailwind-preset.ts +85 -0
- package/src/types.ts +1 -0
- package/src/web/accordion/AI_GUIDE.md +149 -0
- package/src/web/accordion/accordion.css +1 -0
- package/src/web/accordion/accordion.tsx +430 -0
- package/src/web/accordion/index.ts +3 -0
- package/src/web/accordion/manifest.json +351 -0
- package/src/web/alert/AI_GUIDE.md +139 -0
- package/src/web/alert/alert.css +1 -0
- package/src/web/alert/alert.tsx +318 -0
- package/src/web/alert/index.ts +3 -0
- package/src/web/alert/manifest.json +240 -0
- package/src/web/avatar/AI_GUIDE.md +118 -0
- package/src/web/avatar/avatar.css +1 -0
- package/src/web/avatar/avatar.tsx +233 -0
- package/src/web/avatar/index.ts +3 -0
- package/src/web/avatar/manifest.json +195 -0
- package/src/web/badge/AI_GUIDE.md +94 -0
- package/src/web/badge/badge.css +1 -0
- package/src/web/badge/badge.tsx +140 -0
- package/src/web/badge/index.ts +2 -0
- package/src/web/badge/manifest.json +141 -0
- package/src/web/banner/AI_GUIDE.md +130 -0
- package/src/web/banner/banner.css +1 -0
- package/src/web/banner/banner.tsx +334 -0
- package/src/web/banner/index.ts +3 -0
- package/src/web/banner/manifest.json +240 -0
- package/src/web/breadcrumb/AI_GUIDE.md +120 -0
- package/src/web/breadcrumb/breadcrumb.css +1 -0
- package/src/web/breadcrumb/breadcrumb.tsx +306 -0
- package/src/web/breadcrumb/index.ts +3 -0
- package/src/web/breadcrumb/manifest.json +225 -0
- package/src/web/button/AI_GUIDE.md +121 -0
- package/src/web/button/button.css +1 -0
- package/src/web/button/button.tsx +287 -0
- package/src/web/button/index.ts +2 -0
- package/src/web/button/manifest.json +177 -0
- package/src/web/calendar/AI_GUIDE.md +151 -0
- package/src/web/calendar/calendar.css +1 -0
- package/src/web/calendar/calendar.tsx +1611 -0
- package/src/web/calendar/index.ts +3 -0
- package/src/web/calendar/manifest.json +470 -0
- package/src/web/card/AI_GUIDE.md +133 -0
- package/src/web/card/card.css +1 -0
- package/src/web/card/card.tsx +408 -0
- package/src/web/card/index.ts +4 -0
- package/src/web/card/manifest.json +357 -0
- package/src/web/checkbox/AI_GUIDE.md +146 -0
- package/src/web/checkbox/checkbox.css +1 -0
- package/src/web/checkbox/checkbox.tsx +307 -0
- package/src/web/checkbox/index.ts +2 -0
- package/src/web/checkbox/manifest.json +294 -0
- package/src/web/chip/AI_GUIDE.md +186 -0
- package/src/web/chip/chip.css +1 -0
- package/src/web/chip/chip.tsx +230 -0
- package/src/web/chip/index.ts +2 -0
- package/src/web/chip/manifest.json +186 -0
- package/src/web/dropdown/AI_GUIDE.md +167 -0
- package/src/web/dropdown/dropdown.css +1 -0
- package/src/web/dropdown/dropdown.tsx +1274 -0
- package/src/web/dropdown/index.ts +3 -0
- package/src/web/dropdown/manifest.json +576 -0
- package/src/web/flex/AI_GUIDE.md +113 -0
- package/src/web/flex/flex-item.tsx +97 -0
- package/src/web/flex/flex.css +1 -0
- package/src/web/flex/flex.tsx +108 -0
- package/src/web/flex/index.ts +5 -0
- package/src/web/flex/manifest.json +162 -0
- package/src/web/form/index.ts +7 -0
- package/src/web/grid/AI_GUIDE.md +112 -0
- package/src/web/grid/grid-item.tsx +112 -0
- package/src/web/grid/grid.css +1 -0
- package/src/web/grid/grid.tsx +99 -0
- package/src/web/grid/index.ts +5 -0
- package/src/web/grid/manifest.json +153 -0
- package/src/web/index.ts +86 -0
- package/src/web/input/AI_GUIDE.md +159 -0
- package/src/web/input/index.ts +3 -0
- package/src/web/input/input.css +1 -0
- package/src/web/input/input.tsx +537 -0
- package/src/web/input/manifest.json +465 -0
- package/src/web/input-number/AI_GUIDE.md +164 -0
- package/src/web/input-number/index.ts +3 -0
- package/src/web/input-number/input-number.css +1 -0
- package/src/web/input-number/input-number.tsx +1193 -0
- package/src/web/input-number/manifest.json +575 -0
- package/src/web/modal/AI_GUIDE.md +171 -0
- package/src/web/modal/index.ts +3 -0
- package/src/web/modal/manifest.json +375 -0
- package/src/web/modal/modal.css +1 -0
- package/src/web/modal/modal.tsx +571 -0
- package/src/web/pagination/AI_GUIDE.md +148 -0
- package/src/web/pagination/index.ts +21 -0
- package/src/web/pagination/manifest.json +432 -0
- package/src/web/pagination/pagination-content.tsx +45 -0
- package/src/web/pagination/pagination-ellipsis.tsx +54 -0
- package/src/web/pagination/pagination-first.tsx +155 -0
- package/src/web/pagination/pagination-item.tsx +45 -0
- package/src/web/pagination/pagination-last.tsx +155 -0
- package/src/web/pagination/pagination-link.tsx +121 -0
- package/src/web/pagination/pagination-next.tsx +158 -0
- package/src/web/pagination/pagination-previous.tsx +158 -0
- package/src/web/pagination/pagination.css +1 -0
- package/src/web/pagination/pagination.tsx +687 -0
- package/src/web/popover/AI_GUIDE.md +163 -0
- package/src/web/popover/index.ts +3 -0
- package/src/web/popover/manifest.json +396 -0
- package/src/web/popover/popover.css +1 -0
- package/src/web/popover/popover.tsx +702 -0
- package/src/web/radio/AI_GUIDE.md +155 -0
- package/src/web/radio/index.ts +2 -0
- package/src/web/radio/manifest.json +294 -0
- package/src/web/radio/radio.css +1 -0
- package/src/web/radio/radio.tsx +290 -0
- package/src/web/selectbox/AI_GUIDE.md +216 -0
- package/src/web/selectbox/index.ts +3 -0
- package/src/web/selectbox/manifest.json +477 -0
- package/src/web/selectbox/selectbox.css +1 -0
- package/src/web/selectbox/selectbox.tsx +1048 -0
- package/src/web/sonner/AI_GUIDE.md +98 -0
- package/src/web/sonner/index.ts +114 -0
- package/src/web/sonner/manifest.json +132 -0
- package/src/web/sonner/sonner.css +1 -0
- package/src/web/sonner/sonner.tsx +177 -0
- package/src/web/table/AI_GUIDE.md +145 -0
- package/src/web/table/index.ts +35 -0
- package/src/web/table/manifest.json +168 -0
- package/src/web/table/table-body.tsx +45 -0
- package/src/web/table/table-caption.tsx +45 -0
- package/src/web/table/table-cell.tsx +74 -0
- package/src/web/table/table-empty.tsx +108 -0
- package/src/web/table/table-footer.tsx +45 -0
- package/src/web/table/table-head.tsx +80 -0
- package/src/web/table/table-header.tsx +45 -0
- package/src/web/table/table-row.tsx +69 -0
- package/src/web/table/table.css +1 -0
- package/src/web/table/table.tsx +305 -0
- package/src/web/tabs/AI_GUIDE.md +150 -0
- package/src/web/tabs/index.ts +3 -0
- package/src/web/tabs/manifest.json +315 -0
- package/src/web/tabs/tabs.css +1 -0
- package/src/web/tabs/tabs.tsx +332 -0
- package/src/web/text/AI_GUIDE.md +129 -0
- package/src/web/text/index.ts +3 -0
- package/src/web/text/manifest.json +195 -0
- package/src/web/text/text.css +1 -0
- package/src/web/text/text.tsx +689 -0
- package/src/web/textarea/AI_GUIDE.md +141 -0
- package/src/web/textarea/index.ts +3 -0
- package/src/web/textarea/manifest.json +438 -0
- package/src/web/textarea/textarea.css +1 -0
- package/src/web/textarea/textarea.tsx +467 -0
- package/src/web/tooltip/AI_GUIDE.md +110 -0
- package/src/web/tooltip/index.ts +3 -0
- package/src/web/tooltip/manifest.json +222 -0
- package/src/web/tooltip/tooltip.css +1 -0
- package/src/web/tooltip/tooltip.tsx +423 -0
- package/src/webview/bottomsheet/AI_GUIDE.md +141 -0
- package/src/webview/bottomsheet/bottomsheet.css +1 -0
- package/src/webview/bottomsheet/bottomsheet.tsx +603 -0
- package/src/webview/bottomsheet/index.ts +4 -0
- package/src/webview/bottomsheet/manifest.json +377 -0
- package/src/webview/button/AI_GUIDE.md +79 -0
- package/src/webview/button/button-ios.css +1 -0
- package/src/webview/button/button-ios.tsx +138 -0
- package/src/webview/button/button-material.css +1 -0
- package/src/webview/button/button-material.tsx +138 -0
- package/src/webview/button/index.ts +7 -0
- package/src/webview/button/manifest.json +148 -0
- package/src/webview/index.ts +7 -0
- package/tailwind-preset.cjs +62 -0
- package/tailwind-preset.js +62 -0
- package/ttdk-manifest.json +10188 -0
- package/README.md +0 -3
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
# <Chip /> — TTDK Component Reference
|
|
2
|
+
|
|
3
|
+
TTDK Chip component with multi-theme support.
|
|
4
|
+
|
|
5
|
+
## 1. Stylesheets & Theming (Pure CSS)
|
|
6
|
+
Import the corresponding stylesheet for the theme you wish to use:
|
|
7
|
+
- **COMMON Theme**: `import "@ttdk-design-system/library-<react|vue|svelte>/web/chip/chip.css";`
|
|
8
|
+
|
|
9
|
+
## 2. Subpath Component Import
|
|
10
|
+
```ts
|
|
11
|
+
// React
|
|
12
|
+
import Chip from "@ttdk-design-system/library-react/web/chip";
|
|
13
|
+
|
|
14
|
+
// Vue 3
|
|
15
|
+
import Chip from "@ttdk-design-system/library-vue/web/chip";
|
|
16
|
+
|
|
17
|
+
// Svelte
|
|
18
|
+
import Chip from "@ttdk-design-system/library-svelte/web/chip";
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## 3. Props & API Reference
|
|
22
|
+
|
|
23
|
+
| Prop | Type | Default | Description |
|
|
24
|
+
| :--- | :--- | :--- | :--- |
|
|
25
|
+
| `label?` | `string` | `-` | Teks label yang ditampilkan pada chip. |
|
|
26
|
+
| `selected?` | `boolean` | `false` | Status apakah chip sedang dalam kondisi terpilih (selected). |
|
|
27
|
+
| `variant?` | `| 'primary'
|
|
28
|
+
| 'success'
|
|
29
|
+
| 'info'
|
|
30
|
+
| 'warning'
|
|
31
|
+
| 'danger'
|
|
32
|
+
| 'neutral'
|
|
33
|
+
| 'disabled'` | `primary` | Varian warna semantik tema chip: - `'primary'`: Brand Teal utama (#00B5AD). - `'success'`: Sukses hijau (#04B761). - `'info'`: Biru informasi (#2196F3). - `'warning'`: Peringatan kuning / amber (#F88000). - `'danger'`: Bahaya / merah (#D0021B). - `'neutral'`: Netral abu-abu. - `'disabled'`: Status nonaktif (disabled). |
|
|
34
|
+
| `appearance?` | `'soft' | 'solid' | 'outline'` | `soft` | Tipe tampilan visual chip: - `'soft'`: Background warna transparan lembut (default). - `'solid'`: Background warna solid pekat. - `'outline'`: Border tipis dengan background transparan. |
|
|
35
|
+
| `size?` | `'sm' | 'md' | 'lg'` | `md` | Skala ukuran chip: - `'sm'`: Tinggi 28px, font 12px. - `'md'`: Tinggi 32px, font 13px (standar). - `'lg'`: Tinggi 38px, font 15px. |
|
|
36
|
+
| `rounded?` | `'none' | 'sm' | 'md' | 'lg' | 'full'` | `full` | Bentuk sudut kelengkungan: - `'full'`: Bentuk kapsul / pill 9999px (default). - `'none'`: Persegi lancip 0px. - `'sm'`: Sudut melengkung halus 4px. - `'md'`: Sudut melengkung sedang 6px. - `'lg'`: Sudut melengkung besar 8px. |
|
|
37
|
+
| `closable?` | `boolean` | `false` | Menampilkan tombol silang (x) untuk menghapus / menutup chip. |
|
|
38
|
+
| `disabled?` | `boolean` | `false` | Menonaktifkan interaksi klik pada chip. |
|
|
39
|
+
| `ui?` | `UiProps` | `-` | Kustomisasi visual granular melalui style-like object (+ support pseudo-class: hover, active). |
|
|
40
|
+
| `style?` | `any` | `-` | Inline CSS style object native. |
|
|
41
|
+
| `labelStyle?` | `UiProps` | `-` | Style kustom untuk teks label chip (UiProps). |
|
|
42
|
+
| `labelClass?` | `string` | `-` | Class CSS kustom untuk teks label chip (Tailwind / class kustom). |
|
|
43
|
+
| `closableStyle?` | `UiProps` | `-` | Style kustom untuk tombol tutup chip (UiProps). |
|
|
44
|
+
| `closableClass?` | `string` | `-` | Class CSS kustom untuk tombol tutup chip (Tailwind / class kustom). |
|
|
45
|
+
| `onClick?` | `(event?: any) => void` | `-` | Event handler saat chip diklik (toggle select atau trigger aksi). |
|
|
46
|
+
| `onClose?` | `(event?: any) => void` | `-` | Event handler saat tombol close (x) diklik. |
|
|
47
|
+
| `className?` | `string` | `-` | Class CSS kustom. |
|
|
48
|
+
| `children?` | `any` | `-` | Konten kustom / icon kustom yang disisipkan di dalam chip. |
|
|
49
|
+
|
|
50
|
+
## 4. Usage Examples
|
|
51
|
+
|
|
52
|
+
### React Example
|
|
53
|
+
```tsx
|
|
54
|
+
import { useState } from "react";
|
|
55
|
+
import Chip from "@ttdk-design-system/library-react/web/chip";
|
|
56
|
+
import "@ttdk-design-system/library-react/web/chip/chip.css";
|
|
57
|
+
|
|
58
|
+
export function Example() {
|
|
59
|
+
const [selected, setSelected] = useState<string[]>(['puskesmas']);
|
|
60
|
+
|
|
61
|
+
const toggle = (val: string) => {
|
|
62
|
+
setSelected((prev) =>
|
|
63
|
+
prev.includes(val) ? prev.filter((i) => i !== val) : [...prev, val]
|
|
64
|
+
);
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
return (
|
|
68
|
+
<div style={{ display: 'flex', gap: '8px', flexWrap: 'wrap' }}>
|
|
69
|
+
<Chip
|
|
70
|
+
label="Puskesmas"
|
|
71
|
+
variant="action"
|
|
72
|
+
selected={selected.includes('puskesmas')}
|
|
73
|
+
onClick={() => toggle('puskesmas')}
|
|
74
|
+
/>
|
|
75
|
+
<Chip
|
|
76
|
+
label="Rumah Sakit"
|
|
77
|
+
variant="action"
|
|
78
|
+
selected={selected.includes('rs')}
|
|
79
|
+
onClick={() => toggle('rs')}
|
|
80
|
+
/>
|
|
81
|
+
<Chip
|
|
82
|
+
label="Klinik"
|
|
83
|
+
variant="action"
|
|
84
|
+
selected={selected.includes('klinik')}
|
|
85
|
+
onClick={() => toggle('klinik')}
|
|
86
|
+
/>
|
|
87
|
+
<Chip
|
|
88
|
+
label="Laboratorium"
|
|
89
|
+
closable
|
|
90
|
+
onClose={() => alert('Chip dihapus')}
|
|
91
|
+
/>
|
|
92
|
+
</div>
|
|
93
|
+
);
|
|
94
|
+
}
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### Vue 3 Example
|
|
98
|
+
```vue
|
|
99
|
+
<script setup lang="ts">
|
|
100
|
+
import { ref } from "vue";
|
|
101
|
+
import Chip from "@ttdk-design-system/library-vue/web/chip";
|
|
102
|
+
import "@ttdk-design-system/library-vue/web/chip/chip.css";
|
|
103
|
+
|
|
104
|
+
const selected = ref(['puskesmas']);
|
|
105
|
+
|
|
106
|
+
const toggle = (val: string) => {
|
|
107
|
+
if (selected.value.includes(val)) {
|
|
108
|
+
selected.value = selected.value.filter((i) => i !== val);
|
|
109
|
+
} else {
|
|
110
|
+
selected.value.push(val);
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
</script>
|
|
114
|
+
|
|
115
|
+
<template>
|
|
116
|
+
<div style="display: flex; gap: 8px; flex-wrap: wrap;">
|
|
117
|
+
<Chip
|
|
118
|
+
label="Puskesmas"
|
|
119
|
+
variant="action"
|
|
120
|
+
:selected="selected.includes('puskesmas')"
|
|
121
|
+
@click="() => toggle('puskesmas')"
|
|
122
|
+
/>
|
|
123
|
+
<Chip
|
|
124
|
+
label="Rumah Sakit"
|
|
125
|
+
variant="action"
|
|
126
|
+
:selected="selected.includes('rs')"
|
|
127
|
+
@click="() => toggle('rs')"
|
|
128
|
+
/>
|
|
129
|
+
<Chip
|
|
130
|
+
label="Klinik"
|
|
131
|
+
variant="action"
|
|
132
|
+
:selected="selected.includes('klinik')"
|
|
133
|
+
@click="() => toggle('klinik')"
|
|
134
|
+
/>
|
|
135
|
+
<Chip
|
|
136
|
+
label="Laboratorium"
|
|
137
|
+
:closable="true"
|
|
138
|
+
@close="() => alert('Chip dihapus')"
|
|
139
|
+
/>
|
|
140
|
+
</div>
|
|
141
|
+
</template>
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### Svelte Example
|
|
145
|
+
```svelte
|
|
146
|
+
<script lang="ts">
|
|
147
|
+
import Chip from "@ttdk-design-system/library-svelte/web/chip";
|
|
148
|
+
import "@ttdk-design-system/library-svelte/web/chip/chip.css";
|
|
149
|
+
|
|
150
|
+
let selected = ['puskesmas'];
|
|
151
|
+
|
|
152
|
+
const toggle = (val: string) => {
|
|
153
|
+
if (selected.includes(val)) {
|
|
154
|
+
selected = selected.filter((i) => i !== val);
|
|
155
|
+
} else {
|
|
156
|
+
selected = [...selected, val];
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
</script>
|
|
160
|
+
|
|
161
|
+
<div style="display: flex; gap: 8px; flex-wrap: wrap;">
|
|
162
|
+
<Chip
|
|
163
|
+
label="Puskesmas"
|
|
164
|
+
variant="action"
|
|
165
|
+
selected={selected.includes('puskesmas')}
|
|
166
|
+
on:click={() => toggle('puskesmas')}
|
|
167
|
+
/>
|
|
168
|
+
<Chip
|
|
169
|
+
label="Rumah Sakit"
|
|
170
|
+
variant="action"
|
|
171
|
+
selected={selected.includes('rs')}
|
|
172
|
+
on:click={() => toggle('rs')}
|
|
173
|
+
/>
|
|
174
|
+
<Chip
|
|
175
|
+
label="Klinik"
|
|
176
|
+
variant="action"
|
|
177
|
+
selected={selected.includes('klinik')}
|
|
178
|
+
on:click={() => toggle('klinik')}
|
|
179
|
+
/>
|
|
180
|
+
<Chip
|
|
181
|
+
label="Laboratorium"
|
|
182
|
+
closable={true}
|
|
183
|
+
on:close={() => alert('Chip dihapus')}
|
|
184
|
+
/>
|
|
185
|
+
</div>
|
|
186
|
+
```
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.ttdk-chip{font-family:var(--ttdk-font-sans);font-weight:var(--ttdk-font-weight-medium);line-height:var(--ttdk-line-height-tight);letter-spacing:.15px;box-sizing:border-box;user-select:none;white-space:nowrap;vertical-align:middle;cursor:pointer;background-color:var(--ttdk-bg-base-primary);border:1px solid var(--ttdk-stroke-subtle);color:var(--ttdk-text-icon-primary);border-radius:var(--ttdk-radius-full);outline:none;justify-content:center;align-items:center;text-decoration:none;transition:all .15s cubic-bezier(.4,0,.2,1);display:inline-flex;position:relative}.ttdk-chip:focus-visible{box-shadow:0 0 0 2px var(--ttdk-stroke-border-focus)}.ttdk-chip:hover:not([data-disabled=true]):not([data-selected=true]){border-color:var(--ttdk-stroke-border-focus);color:var(--ttdk-text-icon-primary)}.ttdk-chip:active:not([data-disabled=true]){transform:scale(.97)}.ttdk-chip[data-disabled=true],.ttdk-chip[data-variant=disabled],.ttdk-chip[data-variant=disable]{opacity:.75;background-color:var(--ttdk-bg-secondary-disabled)!important;border-color:var(--ttdk-stroke-subtle)!important;color:var(--ttdk-text-icon-disabled)!important;cursor:not-allowed!important;pointer-events:none!important}.ttdk-chip[data-size=xs]{height:24px;padding:0 var(--ttdk-spacing-xs);gap:var(--ttdk-spacing-xxs);font-size:11px}.ttdk-chip[data-size=sm]{height:28px;font-size:var(--ttdk-font-size-12);gap:5px;padding:0 10px}.ttdk-chip[data-size=md]{gap:6px;height:32px;padding:0 14px;font-size:13px}.ttdk-chip[data-size=lg]{gap:var(--ttdk-spacing-xs);height:38px;padding:0 18px;font-size:15px}.ttdk-chip[data-rounded=full]{border-radius:var(--ttdk-radius-full)}.ttdk-chip[data-rounded=lg]{border-radius:var(--ttdk-radius-md)}.ttdk-chip[data-rounded=md]{border-radius:var(--ttdk-radius-sm)}.ttdk-chip[data-rounded=sm]{border-radius:var(--ttdk-radius-xs)}.ttdk-chip[data-rounded=none]{border-radius:var(--ttdk-radius-none)}.ttdk-chip[data-selected=false]{background-color:var(--ttdk-bg-base-primary);border:1px solid var(--ttdk-stroke-subtle);color:var(--ttdk-text-icon-primary)}.ttdk-chip[data-selected=false]:hover:not([data-disabled=true]):not([data-variant=disabled]){border-color:var(--ttdk-stroke-border-focus);color:var(--ttdk-text-icon-primary)}.ttdk-chip[data-appearance=soft][data-variant=primary]:not([data-selected=false]),.ttdk-chip[data-appearance=soft][data-selected=true][data-variant=primary]{background-color:var(--ttdk-brand-subtle);border-color:var(--ttdk-brand-default);color:var(--ttdk-brand-default)}.ttdk-chip[data-appearance=soft][data-variant=success]:not([data-selected=false]),.ttdk-chip[data-appearance=soft][data-selected=true][data-variant=success]{background-color:var(--ttdk-bg-status-success-subtle);border-color:var(--ttdk-stroke-status-success);color:var(--ttdk-text-icon-status-success)}.ttdk-chip[data-appearance=soft][data-variant=info]:not([data-selected=false]),.ttdk-chip[data-appearance=soft][data-selected=true][data-variant=info]{background-color:var(--ttdk-bg-status-info-subtle);border-color:var(--ttdk-stroke-status-info);color:var(--ttdk-text-icon-status-info)}.ttdk-chip[data-appearance=soft][data-variant=warning]:not([data-selected=false]),.ttdk-chip[data-appearance=soft][data-selected=true][data-variant=warning]{background-color:var(--ttdk-bg-status-warning-subtle);border-color:var(--ttdk-stroke-status-warning);color:var(--ttdk-text-icon-status-warning)}.ttdk-chip[data-appearance=soft][data-variant=danger]:not([data-selected=false]),.ttdk-chip[data-appearance=soft][data-selected=true][data-variant=danger]{background-color:var(--ttdk-bg-status-error-subtle);border-color:var(--ttdk-stroke-status-error);color:var(--ttdk-text-icon-status-error)}.ttdk-chip[data-variant=neutral]:not([data-selected=false]),.ttdk-chip[data-variant=base]:not([data-selected=false]),.ttdk-chip[data-appearance=soft][data-variant=neutral]:not([data-selected=false]),.ttdk-chip[data-appearance=soft][data-variant=base]:not([data-selected=false]),.ttdk-chip[data-appearance=soft][data-selected=true][data-variant=neutral],.ttdk-chip[data-appearance=soft][data-selected=true][data-variant=base]{background-color:var(--ttdk-bg-secondary-disabled);border-color:var(--ttdk-stroke-divider);color:var(--ttdk-text-icon-primary)}.ttdk-chip[data-variant=disable]:not([data-selected=false]),.ttdk-chip[data-variant=disabled]:not([data-selected=false]),.ttdk-chip[data-appearance=soft][data-variant=disable]:not([data-selected=false]),.ttdk-chip[data-appearance=soft][data-variant=disabled]:not([data-selected=false]),.ttdk-chip[data-appearance=soft][data-selected=true][data-variant=disable],.ttdk-chip[data-appearance=soft][data-selected=true][data-variant=disabled]{background-color:var(--ttdk-bg-secondary-disabled);border-color:var(--ttdk-stroke-subtle);color:var(--ttdk-text-icon-disabled)}.ttdk-chip[data-appearance=solid][data-variant=primary]:not([data-selected=false]),.ttdk-chip[data-appearance=solid][data-selected=true][data-variant=primary]{background-color:var(--ttdk-brand-default);border-color:var(--ttdk-brand-default);color:var(--ttdk-color-white)}.ttdk-chip[data-appearance=solid][data-variant=success]:not([data-selected=false]),.ttdk-chip[data-appearance=solid][data-selected=true][data-variant=success]{background-color:var(--ttdk-bg-status-success);border-color:var(--ttdk-bg-status-success);color:var(--ttdk-color-white)}.ttdk-chip[data-appearance=solid][data-variant=info]:not([data-selected=false]),.ttdk-chip[data-appearance=solid][data-selected=true][data-variant=info]{background-color:var(--ttdk-bg-status-info);border-color:var(--ttdk-bg-status-info);color:var(--ttdk-color-white)}.ttdk-chip[data-appearance=solid][data-variant=warning]:not([data-selected=false]),.ttdk-chip[data-appearance=solid][data-selected=true][data-variant=warning]{background-color:var(--ttdk-bg-status-warning);border-color:var(--ttdk-bg-status-warning);color:var(--ttdk-color-black)}.ttdk-chip[data-appearance=solid][data-variant=danger]:not([data-selected=false]),.ttdk-chip[data-appearance=solid][data-selected=true][data-variant=danger]{background-color:var(--ttdk-bg-status-error);border-color:var(--ttdk-bg-status-error);color:var(--ttdk-color-white)}.ttdk-chip[data-appearance=solid][data-variant=neutral]:not([data-selected=false]),.ttdk-chip[data-appearance=solid][data-variant=base]:not([data-selected=false]),.ttdk-chip[data-appearance=solid][data-selected=true][data-variant=neutral],.ttdk-chip[data-appearance=solid][data-selected=true][data-variant=base]{background-color:var(--ttdk-bg-secondary-disabled);border-color:var(--ttdk-stroke-divider);color:var(--ttdk-text-icon-primary)}.ttdk-chip[data-appearance=solid][data-variant=disable]:not([data-selected=false]),.ttdk-chip[data-appearance=solid][data-variant=disabled]:not([data-selected=false]),.ttdk-chip[data-appearance=solid][data-selected=true][data-variant=disable],.ttdk-chip[data-appearance=solid][data-selected=true][data-variant=disabled]{background-color:var(--ttdk-bg-secondary-disabled);border-color:var(--ttdk-stroke-subtle);color:var(--ttdk-text-icon-disabled)}.ttdk-chip[data-appearance=outline]:not([data-selected=false]),.ttdk-chip[data-appearance=outline][data-selected=true]{background-color:#0000}.ttdk-chip[data-appearance=outline][data-variant=primary]:not([data-selected=false]),.ttdk-chip[data-appearance=outline][data-selected=true][data-variant=primary]{border-color:var(--ttdk-brand-default);color:var(--ttdk-brand-default)}.ttdk-chip[data-appearance=outline][data-variant=success]:not([data-selected=false]),.ttdk-chip[data-appearance=outline][data-selected=true][data-variant=success]{border-color:var(--ttdk-stroke-status-success);color:var(--ttdk-text-icon-status-success)}.ttdk-chip[data-appearance=outline][data-variant=info]:not([data-selected=false]),.ttdk-chip[data-appearance=outline][data-selected=true][data-variant=info]{border-color:var(--ttdk-stroke-status-info);color:var(--ttdk-text-icon-status-info)}.ttdk-chip[data-appearance=outline][data-variant=warning]:not([data-selected=false]),.ttdk-chip[data-appearance=outline][data-selected=true][data-variant=warning]{border-color:var(--ttdk-stroke-status-warning);color:var(--ttdk-text-icon-status-warning)}.ttdk-chip[data-appearance=outline][data-variant=danger]:not([data-selected=false]),.ttdk-chip[data-appearance=outline][data-selected=true][data-variant=danger]{border-color:var(--ttdk-stroke-status-error);color:var(--ttdk-text-icon-status-error)}.ttdk-chip[data-appearance=outline][data-variant=neutral]:not([data-selected=false]),.ttdk-chip[data-appearance=outline][data-variant=base]:not([data-selected=false]),.ttdk-chip[data-appearance=outline][data-selected=true][data-variant=neutral],.ttdk-chip[data-appearance=outline][data-selected=true][data-variant=base]{border-color:var(--ttdk-stroke-divider);color:var(--ttdk-text-icon-primary)}.ttdk-chip[data-appearance=outline][data-variant=disable]:not([data-selected=false]),.ttdk-chip[data-appearance=outline][data-variant=disabled]:not([data-selected=false]),.ttdk-chip[data-appearance=outline][data-selected=true][data-variant=disable],.ttdk-chip[data-appearance=outline][data-selected=true][data-variant=disabled]{border-color:var(--ttdk-stroke-subtle);color:var(--ttdk-text-icon-disabled)}.dark .ttdk-chip[data-appearance=soft][data-variant=primary]:not([data-selected=false]),[data-theme=dark] .ttdk-chip[data-appearance=soft][data-variant=primary]:not([data-selected=false]),.dark .ttdk-chip[data-appearance=soft][data-selected=true][data-variant=primary],[data-theme=dark] .ttdk-chip[data-appearance=soft][data-selected=true][data-variant=primary]{background-color:var(--ttdk-brand-subtle-dark);border-color:var(--ttdk-brand-default)}.dark .ttdk-chip[data-appearance=soft][data-variant=success]:not([data-selected=false]),[data-theme=dark] .ttdk-chip[data-appearance=soft][data-variant=success]:not([data-selected=false]),.dark .ttdk-chip[data-appearance=soft][data-selected=true][data-variant=success],[data-theme=dark] .ttdk-chip[data-appearance=soft][data-selected=true][data-variant=success]{background-color:var(--ttdk-bg-status-success-subtle);border-color:var(--ttdk-stroke-status-success)}.dark .ttdk-chip[data-appearance=soft][data-variant=info]:not([data-selected=false]),[data-theme=dark] .ttdk-chip[data-appearance=soft][data-variant=info]:not([data-selected=false]),.dark .ttdk-chip[data-appearance=soft][data-selected=true][data-variant=info],[data-theme=dark] .ttdk-chip[data-appearance=soft][data-selected=true][data-variant=info]{background-color:var(--ttdk-bg-status-info-subtle);border-color:var(--ttdk-stroke-status-info)}.dark .ttdk-chip[data-appearance=soft][data-variant=warning]:not([data-selected=false]),[data-theme=dark] .ttdk-chip[data-appearance=soft][data-variant=warning]:not([data-selected=false]),.dark .ttdk-chip[data-appearance=soft][data-selected=true][data-variant=warning],[data-theme=dark] .ttdk-chip[data-appearance=soft][data-selected=true][data-variant=warning]{background-color:var(--ttdk-bg-status-warning-subtle);border-color:var(--ttdk-stroke-status-warning)}.dark .ttdk-chip[data-appearance=soft][data-variant=danger]:not([data-selected=false]),[data-theme=dark] .ttdk-chip[data-appearance=soft][data-variant=danger]:not([data-selected=false]),.dark .ttdk-chip[data-appearance=soft][data-selected=true][data-variant=danger],[data-theme=dark] .ttdk-chip[data-appearance=soft][data-selected=true][data-variant=danger]{background-color:var(--ttdk-bg-status-error-subtle);border-color:var(--ttdk-stroke-status-error)}.dark .ttdk-chip[data-appearance=solid][data-variant=neutral],[data-theme=dark] .ttdk-chip[data-appearance=solid][data-variant=neutral],.dark .ttdk-chip[data-appearance=solid][data-variant=base],[data-theme=dark] .ttdk-chip[data-appearance=solid][data-variant=base]{background-color:var(--ttdk-bg-stay-black);border-color:var(--ttdk-bg-stay-black);color:var(--ttdk-text-icon-stay-white)}.dark .ttdk-chip[data-appearance=soft][data-variant=neutral],[data-theme=dark] .ttdk-chip[data-appearance=soft][data-variant=neutral],.dark .ttdk-chip[data-appearance=soft][data-variant=base],[data-theme=dark] .ttdk-chip[data-appearance=soft][data-variant=base],.dark .ttdk-chip[data-variant=neutral],[data-theme=dark] .ttdk-chip[data-variant=neutral],.dark .ttdk-chip[data-variant=base],[data-theme=dark] .ttdk-chip[data-variant=base]{background-color:var(--ttdk-color-neutral-900);border-color:var(--ttdk-stroke-strong);color:var(--ttdk-text-icon-primary)}.dark .ttdk-chip[data-appearance=outline][data-variant=neutral],[data-theme=dark] .ttdk-chip[data-appearance=outline][data-variant=neutral],.dark .ttdk-chip[data-appearance=outline][data-variant=base],[data-theme=dark] .ttdk-chip[data-appearance=outline][data-variant=base]{background-color:var(--ttdk-bg-stay-black);border-color:var(--ttdk-stroke-stay-white);color:var(--ttdk-text-icon-primary)}.dark .ttdk-chip[data-variant=disable],[data-theme=dark] .ttdk-chip[data-variant=disable],.dark .ttdk-chip[data-variant=disabled],[data-theme=dark] .ttdk-chip[data-variant=disabled]{background-color:var(--ttdk-bg-secondary-disabled);border-color:var(--ttdk-stroke-subtle);color:var(--ttdk-text-icon-disabled)}.ttdk-chip-prefix{flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}.ttdk-chip-close{cursor:pointer;color:currentColor;opacity:.65;border-radius:var(--ttdk-radius-full);background:0 0;border:none;justify-content:center;align-items:center;margin:0 -2px 0 2px;padding:0;line-height:1;transition:opacity .12s,background-color .12s;display:inline-flex}.ttdk-chip-close:hover{opacity:1;background-color:color-mix(in srgb, currentColor 12%, transparent)}.ttdk-chip-close svg{fill:none;stroke:currentColor;stroke-width:2.2px;stroke-linecap:round;stroke-linejoin:round;width:14px;height:14px}.ttdk-chip[data-size=xs] .ttdk-chip-close svg{width:11px;height:11px}.ttdk-chip[data-size=sm] .ttdk-chip-close svg{width:12px;height:12px}.ttdk-chip[data-size=lg] .ttdk-chip-close svg{width:16px;height:16px}
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
|
|
4
|
+
export type ChipUiProps = UiProps;
|
|
5
|
+
export interface ChipProps {
|
|
6
|
+
/**
|
|
7
|
+
* Teks label yang ditampilkan pada chip.
|
|
8
|
+
*/
|
|
9
|
+
label?: string;
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Status apakah chip sedang dalam kondisi terpilih (selected).
|
|
13
|
+
*
|
|
14
|
+
* @default false
|
|
15
|
+
*/
|
|
16
|
+
selected?: boolean;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Varian warna semantik tema chip:
|
|
20
|
+
* - `'primary'`: Brand Teal utama (#00B5AD).
|
|
21
|
+
* - `'success'`: Sukses hijau (#04B761).
|
|
22
|
+
* - `'info'`: Biru informasi (#2196F3).
|
|
23
|
+
* - `'warning'`: Peringatan kuning / amber (#F88000).
|
|
24
|
+
* - `'danger'`: Bahaya / merah (#D0021B).
|
|
25
|
+
* - `'neutral'`: Netral abu-abu.
|
|
26
|
+
* - `'disabled'`: Status nonaktif (disabled).
|
|
27
|
+
*
|
|
28
|
+
* @default 'primary'
|
|
29
|
+
*/
|
|
30
|
+
variant?:
|
|
31
|
+
| "primary"
|
|
32
|
+
| "success"
|
|
33
|
+
| "info"
|
|
34
|
+
| "warning"
|
|
35
|
+
| "danger"
|
|
36
|
+
| "neutral"
|
|
37
|
+
| "disabled";
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Tipe tampilan visual chip:
|
|
41
|
+
* - `'soft'`: Background warna transparan lembut (default).
|
|
42
|
+
* - `'solid'`: Background warna solid pekat.
|
|
43
|
+
* - `'outline'`: Border tipis dengan background transparan.
|
|
44
|
+
*
|
|
45
|
+
* @default 'soft'
|
|
46
|
+
*/
|
|
47
|
+
appearance?: "soft" | "solid" | "outline";
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Skala ukuran chip:
|
|
51
|
+
* - `'sm'`: Tinggi 28px, font 12px.
|
|
52
|
+
* - `'md'`: Tinggi 32px, font 13px (standar).
|
|
53
|
+
* - `'lg'`: Tinggi 38px, font 15px.
|
|
54
|
+
*
|
|
55
|
+
* @default 'md'
|
|
56
|
+
*/
|
|
57
|
+
size?: "sm" | "md" | "lg";
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Bentuk sudut kelengkungan:
|
|
61
|
+
* - `'full'`: Bentuk kapsul / pill 9999px (default).
|
|
62
|
+
* - `'none'`: Persegi lancip 0px.
|
|
63
|
+
* - `'sm'`: Sudut melengkung halus 4px.
|
|
64
|
+
* - `'md'`: Sudut melengkung sedang 6px.
|
|
65
|
+
* - `'lg'`: Sudut melengkung besar 8px.
|
|
66
|
+
*
|
|
67
|
+
* @default 'full'
|
|
68
|
+
*/
|
|
69
|
+
rounded?: "none" | "sm" | "md" | "lg" | "full";
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Menampilkan tombol silang (x) untuk menghapus / menutup chip.
|
|
73
|
+
*
|
|
74
|
+
* @default false
|
|
75
|
+
*/
|
|
76
|
+
closable?: boolean;
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Menonaktifkan interaksi klik pada chip.
|
|
80
|
+
*
|
|
81
|
+
* @default false
|
|
82
|
+
*/
|
|
83
|
+
disabled?: boolean;
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Kustomisasi visual granular melalui style-like object (+ support pseudo-class: hover, active).
|
|
87
|
+
*/
|
|
88
|
+
ui?: UiProps;
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Inline CSS style object native.
|
|
92
|
+
*/
|
|
93
|
+
style?: React.CSSProperties;
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Style kustom untuk teks label chip (UiProps).
|
|
97
|
+
*/
|
|
98
|
+
labelStyle?: UiProps;
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Class CSS kustom untuk teks label chip (Tailwind / class kustom).
|
|
102
|
+
*/
|
|
103
|
+
labelClass?: string;
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Style kustom untuk tombol tutup chip (UiProps).
|
|
107
|
+
*/
|
|
108
|
+
closableStyle?: UiProps;
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Class CSS kustom untuk tombol tutup chip (Tailwind / class kustom).
|
|
112
|
+
*/
|
|
113
|
+
closableClass?: string;
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Event handler saat chip diklik (toggle select atau trigger aksi).
|
|
117
|
+
*/
|
|
118
|
+
onClick?: (event?: any) => void;
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Event handler saat tombol close (x) diklik.
|
|
122
|
+
*/
|
|
123
|
+
onClose?: (event?: any) => void;
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Class CSS kustom.
|
|
127
|
+
*/
|
|
128
|
+
className?: string;
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Konten kustom / icon kustom yang disisipkan di dalam chip.
|
|
132
|
+
*/
|
|
133
|
+
children?: any;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
import { buildUiVars, UiProps } from "../../core/types";
|
|
137
|
+
|
|
138
|
+
function Chip(props: ChipProps) {
|
|
139
|
+
return (
|
|
140
|
+
<button
|
|
141
|
+
type="button"
|
|
142
|
+
className={`ttdk-chip ${props.className || ""}`.trim()}
|
|
143
|
+
data-variant={props.variant || "primary"}
|
|
144
|
+
data-appearance={props.appearance || "soft"}
|
|
145
|
+
data-size={props.size || "md"}
|
|
146
|
+
data-rounded={props.rounded || "full"}
|
|
147
|
+
data-selected={
|
|
148
|
+
props.selected !== undefined
|
|
149
|
+
? props.selected
|
|
150
|
+
? "true"
|
|
151
|
+
: "false"
|
|
152
|
+
: undefined
|
|
153
|
+
}
|
|
154
|
+
data-disabled={
|
|
155
|
+
props.disabled || props.variant === "disabled" ? "true" : "false"
|
|
156
|
+
}
|
|
157
|
+
style={{
|
|
158
|
+
...buildUiVars(props.ui),
|
|
159
|
+
...(props.ui?.border
|
|
160
|
+
? {
|
|
161
|
+
border: props.ui.border,
|
|
162
|
+
}
|
|
163
|
+
: {}),
|
|
164
|
+
...(props.ui?.borderColor
|
|
165
|
+
? {
|
|
166
|
+
borderColor: props.ui.borderColor,
|
|
167
|
+
}
|
|
168
|
+
: {}),
|
|
169
|
+
...(props.ui?.borderWidth
|
|
170
|
+
? {
|
|
171
|
+
borderWidth: props.ui.borderWidth,
|
|
172
|
+
}
|
|
173
|
+
: {}),
|
|
174
|
+
...(props.ui?.borderStyle
|
|
175
|
+
? {
|
|
176
|
+
borderStyle: props.ui.borderStyle,
|
|
177
|
+
}
|
|
178
|
+
: {}),
|
|
179
|
+
...(props.ui?.borderRadius
|
|
180
|
+
? {
|
|
181
|
+
borderRadius: props.ui.borderRadius,
|
|
182
|
+
}
|
|
183
|
+
: {}),
|
|
184
|
+
...((props as any)["style"] || {}),
|
|
185
|
+
...props.style,
|
|
186
|
+
}}
|
|
187
|
+
onClick={(event) => {
|
|
188
|
+
if (props.disabled || props.variant === "disabled") return;
|
|
189
|
+
props.onClick?.(event);
|
|
190
|
+
}}
|
|
191
|
+
>
|
|
192
|
+
<>{props.children}</>
|
|
193
|
+
{props.label ? (
|
|
194
|
+
<span
|
|
195
|
+
className={`ttdk-chip-label ${props.labelClass || ""}`.trim()}
|
|
196
|
+
style={{
|
|
197
|
+
...buildUiVars(props.labelStyle),
|
|
198
|
+
}}
|
|
199
|
+
>
|
|
200
|
+
{props.label}
|
|
201
|
+
</span>
|
|
202
|
+
) : null}
|
|
203
|
+
{props.closable ? (
|
|
204
|
+
<span
|
|
205
|
+
role="button"
|
|
206
|
+
aria-label="Hapus chip"
|
|
207
|
+
tabIndex={0}
|
|
208
|
+
className={`ttdk-chip-close ${props.closableClass || ""}`.trim()}
|
|
209
|
+
style={{
|
|
210
|
+
...buildUiVars(props.closableStyle),
|
|
211
|
+
}}
|
|
212
|
+
onClick={(event) => {
|
|
213
|
+
event.stopPropagation();
|
|
214
|
+
if (props.disabled) return;
|
|
215
|
+
props.onClose?.(event);
|
|
216
|
+
}}
|
|
217
|
+
>
|
|
218
|
+
<svg viewBox="0 0 24 24">
|
|
219
|
+
<line x1="18" y1="6" x2="6" y2="18" />
|
|
220
|
+
<line x1="6" y1="6" x2="18" y2="18" />
|
|
221
|
+
</svg>
|
|
222
|
+
</span>
|
|
223
|
+
) : null}
|
|
224
|
+
</button>
|
|
225
|
+
);
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
export default Chip;
|
|
229
|
+
|
|
230
|
+
export { Chip };
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@ttdk-design-system/chip",
|
|
3
|
+
"component": "Chip",
|
|
4
|
+
"folder": "chip",
|
|
5
|
+
"description": "TTDK Chip component with multi-theme support.",
|
|
6
|
+
"stylesheets": [
|
|
7
|
+
{
|
|
8
|
+
"theme": "common",
|
|
9
|
+
"file": "chip.css",
|
|
10
|
+
"importPath": "web/chip/chip.css"
|
|
11
|
+
}
|
|
12
|
+
],
|
|
13
|
+
"props": {
|
|
14
|
+
"label": {
|
|
15
|
+
"name": "label",
|
|
16
|
+
"type": "string",
|
|
17
|
+
"optional": true,
|
|
18
|
+
"default": null,
|
|
19
|
+
"description": "Teks label yang ditampilkan pada chip.",
|
|
20
|
+
"example": null,
|
|
21
|
+
"param": null
|
|
22
|
+
},
|
|
23
|
+
"selected": {
|
|
24
|
+
"name": "selected",
|
|
25
|
+
"type": "boolean",
|
|
26
|
+
"optional": true,
|
|
27
|
+
"default": "false",
|
|
28
|
+
"description": "Status apakah chip sedang dalam kondisi terpilih (selected).",
|
|
29
|
+
"example": null,
|
|
30
|
+
"param": null
|
|
31
|
+
},
|
|
32
|
+
"variant": {
|
|
33
|
+
"name": "variant",
|
|
34
|
+
"type": "| 'primary'\n | 'success'\n | 'info'\n | 'warning'\n | 'danger'\n | 'neutral'\n | 'disabled'",
|
|
35
|
+
"optional": true,
|
|
36
|
+
"default": "primary",
|
|
37
|
+
"description": "Varian warna semantik tema chip: - `'primary'`: Brand Teal utama (#00B5AD). - `'success'`: Sukses hijau (#04B761). - `'info'`: Biru informasi (#2196F3). - `'warning'`: Peringatan kuning / amber (#F88000). - `'danger'`: Bahaya / merah (#D0021B). - `'neutral'`: Netral abu-abu. - `'disabled'`: Status nonaktif (disabled).",
|
|
38
|
+
"example": null,
|
|
39
|
+
"param": null
|
|
40
|
+
},
|
|
41
|
+
"appearance": {
|
|
42
|
+
"name": "appearance",
|
|
43
|
+
"type": "'soft' | 'solid' | 'outline'",
|
|
44
|
+
"optional": true,
|
|
45
|
+
"default": "soft",
|
|
46
|
+
"description": "Tipe tampilan visual chip: - `'soft'`: Background warna transparan lembut (default). - `'solid'`: Background warna solid pekat. - `'outline'`: Border tipis dengan background transparan.",
|
|
47
|
+
"example": null,
|
|
48
|
+
"param": null
|
|
49
|
+
},
|
|
50
|
+
"size": {
|
|
51
|
+
"name": "size",
|
|
52
|
+
"type": "'sm' | 'md' | 'lg'",
|
|
53
|
+
"optional": true,
|
|
54
|
+
"default": "md",
|
|
55
|
+
"description": "Skala ukuran chip: - `'sm'`: Tinggi 28px, font 12px. - `'md'`: Tinggi 32px, font 13px (standar). - `'lg'`: Tinggi 38px, font 15px.",
|
|
56
|
+
"example": null,
|
|
57
|
+
"param": null
|
|
58
|
+
},
|
|
59
|
+
"rounded": {
|
|
60
|
+
"name": "rounded",
|
|
61
|
+
"type": "'none' | 'sm' | 'md' | 'lg' | 'full'",
|
|
62
|
+
"optional": true,
|
|
63
|
+
"default": "full",
|
|
64
|
+
"description": "Bentuk sudut kelengkungan: - `'full'`: Bentuk kapsul / pill 9999px (default). - `'none'`: Persegi lancip 0px. - `'sm'`: Sudut melengkung halus 4px. - `'md'`: Sudut melengkung sedang 6px. - `'lg'`: Sudut melengkung besar 8px.",
|
|
65
|
+
"example": null,
|
|
66
|
+
"param": null
|
|
67
|
+
},
|
|
68
|
+
"closable": {
|
|
69
|
+
"name": "closable",
|
|
70
|
+
"type": "boolean",
|
|
71
|
+
"optional": true,
|
|
72
|
+
"default": "false",
|
|
73
|
+
"description": "Menampilkan tombol silang (x) untuk menghapus / menutup chip.",
|
|
74
|
+
"example": null,
|
|
75
|
+
"param": null
|
|
76
|
+
},
|
|
77
|
+
"disabled": {
|
|
78
|
+
"name": "disabled",
|
|
79
|
+
"type": "boolean",
|
|
80
|
+
"optional": true,
|
|
81
|
+
"default": "false",
|
|
82
|
+
"description": "Menonaktifkan interaksi klik pada chip.",
|
|
83
|
+
"example": null,
|
|
84
|
+
"param": null
|
|
85
|
+
},
|
|
86
|
+
"ui": {
|
|
87
|
+
"name": "ui",
|
|
88
|
+
"type": "UiProps",
|
|
89
|
+
"optional": true,
|
|
90
|
+
"default": null,
|
|
91
|
+
"description": "Kustomisasi visual granular melalui style-like object (+ support pseudo-class: hover, active).",
|
|
92
|
+
"example": null,
|
|
93
|
+
"param": null
|
|
94
|
+
},
|
|
95
|
+
"style": {
|
|
96
|
+
"name": "style",
|
|
97
|
+
"type": "any",
|
|
98
|
+
"optional": true,
|
|
99
|
+
"default": null,
|
|
100
|
+
"description": "Inline CSS style object native.",
|
|
101
|
+
"example": null,
|
|
102
|
+
"param": null
|
|
103
|
+
},
|
|
104
|
+
"labelStyle": {
|
|
105
|
+
"name": "labelStyle",
|
|
106
|
+
"type": "UiProps",
|
|
107
|
+
"optional": true,
|
|
108
|
+
"default": null,
|
|
109
|
+
"description": "Style kustom untuk teks label chip (UiProps).",
|
|
110
|
+
"example": null,
|
|
111
|
+
"param": null
|
|
112
|
+
},
|
|
113
|
+
"labelClass": {
|
|
114
|
+
"name": "labelClass",
|
|
115
|
+
"type": "string",
|
|
116
|
+
"optional": true,
|
|
117
|
+
"default": null,
|
|
118
|
+
"description": "Class CSS kustom untuk teks label chip (Tailwind / class kustom).",
|
|
119
|
+
"example": null,
|
|
120
|
+
"param": null
|
|
121
|
+
},
|
|
122
|
+
"closableStyle": {
|
|
123
|
+
"name": "closableStyle",
|
|
124
|
+
"type": "UiProps",
|
|
125
|
+
"optional": true,
|
|
126
|
+
"default": null,
|
|
127
|
+
"description": "Style kustom untuk tombol tutup chip (UiProps).",
|
|
128
|
+
"example": null,
|
|
129
|
+
"param": null
|
|
130
|
+
},
|
|
131
|
+
"closableClass": {
|
|
132
|
+
"name": "closableClass",
|
|
133
|
+
"type": "string",
|
|
134
|
+
"optional": true,
|
|
135
|
+
"default": null,
|
|
136
|
+
"description": "Class CSS kustom untuk tombol tutup chip (Tailwind / class kustom).",
|
|
137
|
+
"example": null,
|
|
138
|
+
"param": null
|
|
139
|
+
},
|
|
140
|
+
"onClick": {
|
|
141
|
+
"name": "onClick",
|
|
142
|
+
"type": "(event?: any) => void",
|
|
143
|
+
"optional": true,
|
|
144
|
+
"default": null,
|
|
145
|
+
"description": "Event handler saat chip diklik (toggle select atau trigger aksi).",
|
|
146
|
+
"example": null,
|
|
147
|
+
"param": null
|
|
148
|
+
},
|
|
149
|
+
"onClose": {
|
|
150
|
+
"name": "onClose",
|
|
151
|
+
"type": "(event?: any) => void",
|
|
152
|
+
"optional": true,
|
|
153
|
+
"default": null,
|
|
154
|
+
"description": "Event handler saat tombol close (x) diklik.",
|
|
155
|
+
"example": null,
|
|
156
|
+
"param": null
|
|
157
|
+
},
|
|
158
|
+
"className": {
|
|
159
|
+
"name": "className",
|
|
160
|
+
"type": "string",
|
|
161
|
+
"optional": true,
|
|
162
|
+
"default": null,
|
|
163
|
+
"description": "Class CSS kustom.",
|
|
164
|
+
"example": null,
|
|
165
|
+
"param": null
|
|
166
|
+
},
|
|
167
|
+
"children": {
|
|
168
|
+
"name": "children",
|
|
169
|
+
"type": "any",
|
|
170
|
+
"optional": true,
|
|
171
|
+
"default": null,
|
|
172
|
+
"description": "Konten kustom / icon kustom yang disisipkan di dalam chip.",
|
|
173
|
+
"example": null,
|
|
174
|
+
"param": null
|
|
175
|
+
}
|
|
176
|
+
},
|
|
177
|
+
"subInterfaces": {},
|
|
178
|
+
"supportedFrameworks": [
|
|
179
|
+
"react",
|
|
180
|
+
"vue",
|
|
181
|
+
"svelte"
|
|
182
|
+
],
|
|
183
|
+
"themes": [
|
|
184
|
+
"tw"
|
|
185
|
+
]
|
|
186
|
+
}
|