@ttdk-design-system/library-svelte 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/dist/core/index.d.ts +2 -0
- package/dist/core/index.js +2 -0
- package/dist/core/tailwind-preset.cjs +62 -0
- package/dist/core/tailwind-preset.d.cts +63 -0
- package/dist/core/tailwind-preset.d.ts +74 -0
- package/dist/core/tailwind-preset.js +79 -0
- package/dist/core/theme/tokens.css +663 -0
- package/dist/core/types.d.ts +152 -0
- package/dist/core/types.js +735 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.js +15 -0
- package/dist/tailwind-preset.cjs +62 -0
- package/dist/tailwind-preset.d.cts +63 -0
- package/dist/tailwind-preset.d.ts +74 -0
- package/dist/tailwind-preset.js +79 -0
- package/dist/types.d.ts +1 -0
- package/dist/types.js +1 -0
- package/dist/web/accordion/AI_GUIDE.md +149 -0
- package/dist/web/accordion/accordion.css +1 -0
- package/dist/web/accordion/accordion.svelte +217 -0
- package/dist/web/accordion/accordion.svelte.d.ts +224 -0
- package/dist/web/accordion/index.d.ts +2 -0
- package/dist/web/accordion/index.js +2 -0
- package/dist/web/accordion/manifest.json +351 -0
- package/dist/web/alert/AI_GUIDE.md +139 -0
- package/dist/web/alert/alert.css +1 -0
- package/dist/web/alert/alert.svelte +175 -0
- package/dist/web/alert/alert.svelte.d.ts +165 -0
- package/dist/web/alert/index.d.ts +2 -0
- package/dist/web/alert/index.js +2 -0
- package/dist/web/alert/manifest.json +240 -0
- package/dist/web/avatar/AI_GUIDE.md +118 -0
- package/dist/web/avatar/avatar.css +1 -0
- package/dist/web/avatar/avatar.svelte +108 -0
- package/dist/web/avatar/avatar.svelte.d.ts +147 -0
- package/dist/web/avatar/index.d.ts +2 -0
- package/dist/web/avatar/index.js +2 -0
- package/dist/web/avatar/manifest.json +195 -0
- package/dist/web/badge/AI_GUIDE.md +94 -0
- package/dist/web/badge/badge.css +1 -0
- package/dist/web/badge/badge.svelte +50 -0
- package/dist/web/badge/badge.svelte.d.ts +111 -0
- package/dist/web/badge/index.d.ts +2 -0
- package/dist/web/badge/index.js +2 -0
- package/dist/web/badge/manifest.json +141 -0
- package/dist/web/banner/AI_GUIDE.md +130 -0
- package/dist/web/banner/banner.css +1 -0
- package/dist/web/banner/banner.svelte +180 -0
- package/dist/web/banner/banner.svelte.d.ts +172 -0
- package/dist/web/banner/index.d.ts +2 -0
- package/dist/web/banner/index.js +2 -0
- package/dist/web/banner/manifest.json +240 -0
- package/dist/web/breadcrumb/AI_GUIDE.md +120 -0
- package/dist/web/breadcrumb/breadcrumb.css +1 -0
- package/dist/web/breadcrumb/breadcrumb.svelte +168 -0
- package/dist/web/breadcrumb/breadcrumb.svelte.d.ts +141 -0
- package/dist/web/breadcrumb/index.d.ts +2 -0
- package/dist/web/breadcrumb/index.js +2 -0
- package/dist/web/breadcrumb/manifest.json +225 -0
- package/dist/web/button/AI_GUIDE.md +121 -0
- package/dist/web/button/button.css +1 -0
- package/dist/web/button/button.svelte +154 -0
- package/dist/web/button/button.svelte.d.ts +159 -0
- package/dist/web/button/index.d.ts +2 -0
- package/dist/web/button/index.js +2 -0
- package/dist/web/button/manifest.json +177 -0
- package/dist/web/calendar/AI_GUIDE.md +151 -0
- package/dist/web/calendar/calendar.css +1 -0
- package/dist/web/calendar/calendar.svelte +1091 -0
- package/dist/web/calendar/calendar.svelte.d.ts +268 -0
- package/dist/web/calendar/index.d.ts +2 -0
- package/dist/web/calendar/index.js +2 -0
- package/dist/web/calendar/manifest.json +470 -0
- package/dist/web/card/AI_GUIDE.md +133 -0
- package/dist/web/card/card.css +1 -0
- package/dist/web/card/card.svelte +217 -0
- package/dist/web/card/card.svelte.d.ts +242 -0
- package/dist/web/card/index.d.ts +2 -0
- package/dist/web/card/index.js +2 -0
- package/dist/web/card/manifest.json +357 -0
- package/dist/web/checkbox/AI_GUIDE.md +146 -0
- package/dist/web/checkbox/checkbox.css +1 -0
- package/dist/web/checkbox/checkbox.svelte +131 -0
- package/dist/web/checkbox/checkbox.svelte.d.ts +199 -0
- package/dist/web/checkbox/index.d.ts +2 -0
- package/dist/web/checkbox/index.js +2 -0
- package/dist/web/checkbox/manifest.json +294 -0
- package/dist/web/chip/AI_GUIDE.md +186 -0
- package/dist/web/chip/chip.css +1 -0
- package/dist/web/chip/chip.svelte +113 -0
- package/dist/web/chip/chip.svelte.d.ts +145 -0
- package/dist/web/chip/index.d.ts +2 -0
- package/dist/web/chip/index.js +2 -0
- package/dist/web/chip/manifest.json +186 -0
- package/dist/web/dropdown/AI_GUIDE.md +167 -0
- package/dist/web/dropdown/dropdown.css +1 -0
- package/dist/web/dropdown/dropdown.svelte +844 -0
- package/dist/web/dropdown/dropdown.svelte.d.ts +361 -0
- package/dist/web/dropdown/index.d.ts +2 -0
- package/dist/web/dropdown/index.js +2 -0
- package/dist/web/dropdown/manifest.json +576 -0
- package/dist/web/flex/AI_GUIDE.md +113 -0
- package/dist/web/flex/flex-item.svelte +37 -0
- package/dist/web/flex/flex-item.svelte.d.ts +96 -0
- package/dist/web/flex/flex.css +1 -0
- package/dist/web/flex/flex.svelte +39 -0
- package/dist/web/flex/flex.svelte.d.ts +104 -0
- package/dist/web/flex/index.d.ts +3 -0
- package/dist/web/flex/index.js +3 -0
- package/dist/web/flex/manifest.json +162 -0
- package/dist/web/form/index.d.ts +1 -0
- package/dist/web/form/index.js +2 -0
- package/dist/web/grid/AI_GUIDE.md +112 -0
- package/dist/web/grid/grid-item.svelte +41 -0
- package/dist/web/grid/grid-item.svelte.d.ts +112 -0
- package/dist/web/grid/grid.css +1 -0
- package/dist/web/grid/grid.svelte +37 -0
- package/dist/web/grid/grid.svelte.d.ts +96 -0
- package/dist/web/grid/index.d.ts +3 -0
- package/dist/web/grid/index.js +3 -0
- package/dist/web/grid/manifest.json +153 -0
- package/dist/web/index.d.ts +58 -0
- package/dist/web/index.js +57 -0
- package/dist/web/input/AI_GUIDE.md +159 -0
- package/dist/web/input/index.d.ts +2 -0
- package/dist/web/input/index.js +2 -0
- package/dist/web/input/input.css +1 -0
- package/dist/web/input/input.svelte +283 -0
- package/dist/web/input/input.svelte.d.ts +283 -0
- package/dist/web/input/manifest.json +465 -0
- package/dist/web/input-number/AI_GUIDE.md +164 -0
- package/dist/web/input-number/index.d.ts +2 -0
- package/dist/web/input-number/index.js +2 -0
- package/dist/web/input-number/input-number.css +1 -0
- package/dist/web/input-number/input-number.svelte +783 -0
- package/dist/web/input-number/input-number.svelte.d.ts +352 -0
- package/dist/web/input-number/manifest.json +575 -0
- package/dist/web/modal/AI_GUIDE.md +171 -0
- package/dist/web/modal/index.d.ts +2 -0
- package/dist/web/modal/index.js +2 -0
- package/dist/web/modal/manifest.json +375 -0
- package/dist/web/modal/modal.css +1 -0
- package/dist/web/modal/modal.svelte +333 -0
- package/dist/web/modal/modal.svelte.d.ts +231 -0
- package/dist/web/pagination/AI_GUIDE.md +148 -0
- package/dist/web/pagination/index.d.ts +19 -0
- package/dist/web/pagination/index.js +19 -0
- package/dist/web/pagination/manifest.json +432 -0
- package/dist/web/pagination/pagination-content.svelte +25 -0
- package/dist/web/pagination/pagination-content.svelte.d.ts +36 -0
- package/dist/web/pagination/pagination-ellipsis.svelte +38 -0
- package/dist/web/pagination/pagination-ellipsis.svelte.d.ts +35 -0
- package/dist/web/pagination/pagination-first.svelte +105 -0
- package/dist/web/pagination/pagination-first.svelte.d.ts +74 -0
- package/dist/web/pagination/pagination-item.svelte +25 -0
- package/dist/web/pagination/pagination-item.svelte.d.ts +36 -0
- package/dist/web/pagination/pagination-last.svelte +105 -0
- package/dist/web/pagination/pagination-last.svelte.d.ts +74 -0
- package/dist/web/pagination/pagination-link.svelte +67 -0
- package/dist/web/pagination/pagination-link.svelte.d.ts +69 -0
- package/dist/web/pagination/pagination-next.svelte +99 -0
- package/dist/web/pagination/pagination-next.svelte.d.ts +75 -0
- package/dist/web/pagination/pagination-previous.svelte +99 -0
- package/dist/web/pagination/pagination-previous.svelte.d.ts +75 -0
- package/dist/web/pagination/pagination.css +1 -0
- package/dist/web/pagination/pagination.svelte +471 -0
- package/dist/web/pagination/pagination.svelte.d.ts +256 -0
- package/dist/web/popover/AI_GUIDE.md +163 -0
- package/dist/web/popover/index.d.ts +3 -0
- package/dist/web/popover/index.js +3 -0
- package/dist/web/popover/manifest.json +396 -0
- package/dist/web/popover/popover.css +1 -0
- package/dist/web/popover/popover.svelte +497 -0
- package/dist/web/popover/popover.svelte.d.ts +116 -0
- package/dist/web/radio/AI_GUIDE.md +155 -0
- package/dist/web/radio/index.d.ts +2 -0
- package/dist/web/radio/index.js +2 -0
- package/dist/web/radio/manifest.json +294 -0
- package/dist/web/radio/radio.css +1 -0
- package/dist/web/radio/radio.svelte +123 -0
- package/dist/web/radio/radio.svelte.d.ts +192 -0
- package/dist/web/selectbox/AI_GUIDE.md +216 -0
- package/dist/web/selectbox/index.d.ts +2 -0
- package/dist/web/selectbox/index.js +2 -0
- package/dist/web/selectbox/manifest.json +477 -0
- package/dist/web/selectbox/selectbox.css +1 -0
- package/dist/web/selectbox/selectbox.svelte +704 -0
- package/dist/web/selectbox/selectbox.svelte.d.ts +296 -0
- package/dist/web/sonner/AI_GUIDE.md +98 -0
- package/dist/web/sonner/index.d.ts +46 -0
- package/dist/web/sonner/index.js +64 -0
- package/dist/web/sonner/manifest.json +132 -0
- package/dist/web/sonner/sonner.css +1 -0
- package/dist/web/sonner/sonner.svelte +85 -0
- package/dist/web/sonner/sonner.svelte.d.ts +105 -0
- package/dist/web/table/AI_GUIDE.md +145 -0
- package/dist/web/table/index.d.ts +21 -0
- package/dist/web/table/index.js +22 -0
- package/dist/web/table/manifest.json +168 -0
- package/dist/web/table/table-body.svelte +23 -0
- package/dist/web/table/table-body.svelte.d.ts +36 -0
- package/dist/web/table/table-caption.svelte +23 -0
- package/dist/web/table/table-caption.svelte.d.ts +36 -0
- package/dist/web/table/table-cell.svelte +35 -0
- package/dist/web/table/table-cell.svelte.d.ts +57 -0
- package/dist/web/table/table-empty.svelte +56 -0
- package/dist/web/table/table-empty.svelte.d.ts +65 -0
- package/dist/web/table/table-footer.svelte +23 -0
- package/dist/web/table/table-footer.svelte.d.ts +36 -0
- package/dist/web/table/table-head.svelte +39 -0
- package/dist/web/table/table-head.svelte.d.ts +58 -0
- package/dist/web/table/table-header.svelte +23 -0
- package/dist/web/table/table-header.svelte.d.ts +36 -0
- package/dist/web/table/table-row.svelte +33 -0
- package/dist/web/table/table-row.svelte.d.ts +52 -0
- package/dist/web/table/table.css +1 -0
- package/dist/web/table/table.svelte +178 -0
- package/dist/web/table/table.svelte.d.ts +120 -0
- package/dist/web/tabs/AI_GUIDE.md +150 -0
- package/dist/web/tabs/index.d.ts +2 -0
- package/dist/web/tabs/index.js +2 -0
- package/dist/web/tabs/manifest.json +315 -0
- package/dist/web/tabs/tabs.css +1 -0
- package/dist/web/tabs/tabs.svelte +138 -0
- package/dist/web/tabs/tabs.svelte.d.ts +204 -0
- package/dist/web/text/AI_GUIDE.md +129 -0
- package/dist/web/text/index.d.ts +2 -0
- package/dist/web/text/index.js +2 -0
- package/dist/web/text/manifest.json +195 -0
- package/dist/web/text/text.css +1 -0
- package/dist/web/text/text.svelte +515 -0
- package/dist/web/text/text.svelte.d.ts +168 -0
- package/dist/web/textarea/AI_GUIDE.md +141 -0
- package/dist/web/textarea/index.d.ts +2 -0
- package/dist/web/textarea/index.js +2 -0
- package/dist/web/textarea/manifest.json +438 -0
- package/dist/web/textarea/textarea.css +1 -0
- package/dist/web/textarea/textarea.svelte +224 -0
- package/dist/web/textarea/textarea.svelte.d.ts +274 -0
- package/dist/web/tooltip/AI_GUIDE.md +110 -0
- package/dist/web/tooltip/index.d.ts +2 -0
- package/dist/web/tooltip/index.js +2 -0
- package/dist/web/tooltip/manifest.json +222 -0
- package/dist/web/tooltip/tooltip.css +1 -0
- package/dist/web/tooltip/tooltip.svelte +292 -0
- package/dist/web/tooltip/tooltip.svelte.d.ts +140 -0
- package/dist/webview/bottomsheet/AI_GUIDE.md +141 -0
- package/dist/webview/bottomsheet/bottomsheet.css +1 -0
- package/dist/webview/bottomsheet/bottomsheet.svelte +462 -0
- package/dist/webview/bottomsheet/bottomsheet.svelte.d.ts +200 -0
- package/dist/webview/bottomsheet/index.d.ts +4 -0
- package/dist/webview/bottomsheet/index.js +3 -0
- package/dist/webview/bottomsheet/manifest.json +377 -0
- package/dist/webview/button/AI_GUIDE.md +79 -0
- package/dist/webview/button/button-ios.css +1 -0
- package/dist/webview/button/button-ios.svelte +58 -0
- package/dist/webview/button/button-ios.svelte.d.ts +114 -0
- package/dist/webview/button/button-material.css +1 -0
- package/dist/webview/button/button-material.svelte +58 -0
- package/dist/webview/button/button-material.svelte.d.ts +114 -0
- package/dist/webview/button/index.d.ts +6 -0
- package/dist/webview/button/index.js +4 -0
- package/dist/webview/button/manifest.json +148 -0
- package/dist/webview/index.d.ts +6 -0
- package/dist/webview/index.js +6 -0
- package/llms.txt +6518 -0
- package/package.json +709 -4
- package/ttdk-manifest.json +10188 -0
- package/README.md +0 -3
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
<script context="module"></script>
|
|
2
|
+
|
|
3
|
+
<script>import { buildUiVars, UiProps } from "../../core/types";
|
|
4
|
+
export let className = void 0;
|
|
5
|
+
export let colSpan = void 0;
|
|
6
|
+
export let rowSpan = void 0;
|
|
7
|
+
export let align = void 0;
|
|
8
|
+
export let width = void 0;
|
|
9
|
+
export let ui = void 0;
|
|
10
|
+
function stringifyStyles(stylesObj) {
|
|
11
|
+
let styles = "";
|
|
12
|
+
for (let key in stylesObj) {
|
|
13
|
+
const dashedKey = key.replace(/[A-Z]/g, function(match) {
|
|
14
|
+
return "-" + match.toLowerCase();
|
|
15
|
+
});
|
|
16
|
+
styles += dashedKey + ":" + stylesObj[key] + ";";
|
|
17
|
+
}
|
|
18
|
+
return styles;
|
|
19
|
+
}
|
|
20
|
+
</script>
|
|
21
|
+
|
|
22
|
+
<td
|
|
23
|
+
style={stringifyStyles({
|
|
24
|
+
textAlign: align || "left",
|
|
25
|
+
...(width
|
|
26
|
+
? {
|
|
27
|
+
width: width,
|
|
28
|
+
}
|
|
29
|
+
: {}),
|
|
30
|
+
...buildUiVars(ui),
|
|
31
|
+
})}
|
|
32
|
+
class={`ttdk-table-cell ${className || ""}`.trim()}
|
|
33
|
+
{colSpan}
|
|
34
|
+
{rowSpan}><slot /></td
|
|
35
|
+
>
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { SvelteComponent } from "svelte";
|
|
2
|
+
export interface TableCellProps {
|
|
3
|
+
/**
|
|
4
|
+
* Penyelarasan teks sel ('left' | 'center' | 'right').
|
|
5
|
+
* @default 'left'
|
|
6
|
+
*/
|
|
7
|
+
align?: "left" | "center" | "right";
|
|
8
|
+
/**
|
|
9
|
+
* Lebar sel kustom.
|
|
10
|
+
*/
|
|
11
|
+
width?: string;
|
|
12
|
+
/**
|
|
13
|
+
* Jumlah span kolom (colspan).
|
|
14
|
+
*/
|
|
15
|
+
colSpan?: number;
|
|
16
|
+
/**
|
|
17
|
+
* Jumlah span baris (rowspan).
|
|
18
|
+
*/
|
|
19
|
+
rowSpan?: number;
|
|
20
|
+
/**
|
|
21
|
+
* Kustomisasi visual granular td (UiProps).
|
|
22
|
+
*/
|
|
23
|
+
ui?: UiProps;
|
|
24
|
+
/**
|
|
25
|
+
* Class CSS kustom.
|
|
26
|
+
*/
|
|
27
|
+
className?: string;
|
|
28
|
+
/**
|
|
29
|
+
* Konten di dalam sel tabel.
|
|
30
|
+
*/
|
|
31
|
+
children?: any;
|
|
32
|
+
}
|
|
33
|
+
import { UiProps } from "../../core/types";
|
|
34
|
+
declare const __propDef: {
|
|
35
|
+
props: {
|
|
36
|
+
className?: TableCellProps["className"];
|
|
37
|
+
colSpan?: TableCellProps["colSpan"];
|
|
38
|
+
rowSpan?: TableCellProps["rowSpan"];
|
|
39
|
+
align?: TableCellProps["align"];
|
|
40
|
+
width?: TableCellProps["width"];
|
|
41
|
+
ui?: TableCellProps["ui"];
|
|
42
|
+
};
|
|
43
|
+
events: {
|
|
44
|
+
[evt: string]: CustomEvent<any>;
|
|
45
|
+
};
|
|
46
|
+
slots: {
|
|
47
|
+
default: {};
|
|
48
|
+
};
|
|
49
|
+
exports?: {} | undefined;
|
|
50
|
+
bindings?: string | undefined;
|
|
51
|
+
};
|
|
52
|
+
type TableCellProps_ = typeof __propDef.props;
|
|
53
|
+
export type TableCellEvents = typeof __propDef.events;
|
|
54
|
+
export type TableCellSlots = typeof __propDef.slots;
|
|
55
|
+
export default class TableCell extends SvelteComponent<TableCellProps_, TableCellEvents, TableCellSlots> {
|
|
56
|
+
}
|
|
57
|
+
export {};
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
<script context="module"></script>
|
|
2
|
+
|
|
3
|
+
<script>import { buildUiVars, UiProps } from "../../core/types";
|
|
4
|
+
export let className = void 0;
|
|
5
|
+
export let ui = void 0;
|
|
6
|
+
export let colSpan = void 0;
|
|
7
|
+
export let title = void 0;
|
|
8
|
+
export let description = void 0;
|
|
9
|
+
export let actionLabel = void 0;
|
|
10
|
+
export let onAction = void 0;
|
|
11
|
+
function stringifyStyles(stylesObj) {
|
|
12
|
+
let styles = "";
|
|
13
|
+
for (let key in stylesObj) {
|
|
14
|
+
const dashedKey = key.replace(/[A-Z]/g, function(match) {
|
|
15
|
+
return "-" + match.toLowerCase();
|
|
16
|
+
});
|
|
17
|
+
styles += dashedKey + ":" + stylesObj[key] + ";";
|
|
18
|
+
}
|
|
19
|
+
return styles;
|
|
20
|
+
}
|
|
21
|
+
</script>
|
|
22
|
+
|
|
23
|
+
<tr
|
|
24
|
+
style={stringifyStyles({
|
|
25
|
+
...buildUiVars(ui),
|
|
26
|
+
})}
|
|
27
|
+
class={`ttdk-table-row ttdk-table-empty-row ${className || ""}`.trim()}
|
|
28
|
+
><td class="ttdk-table-cell" colSpan={colSpan || 10}
|
|
29
|
+
><div class="ttdk-table-empty-wrapper">
|
|
30
|
+
{#if title || description}
|
|
31
|
+
<p class="ttdk-table-empty-title">
|
|
32
|
+
{title || "Tidak ada dataset yang cocok"}
|
|
33
|
+
</p>
|
|
34
|
+
|
|
35
|
+
{#if description}
|
|
36
|
+
<p class="ttdk-table-empty-desc">{description}</p>
|
|
37
|
+
{/if}
|
|
38
|
+
|
|
39
|
+
{#if actionLabel}
|
|
40
|
+
<button
|
|
41
|
+
type="button"
|
|
42
|
+
class="ttdk-table-empty-action"
|
|
43
|
+
on:click={(event) => {
|
|
44
|
+
if (onAction) {
|
|
45
|
+
onAction();
|
|
46
|
+
}
|
|
47
|
+
}}>{actionLabel}</button
|
|
48
|
+
>
|
|
49
|
+
{/if}
|
|
50
|
+
<slot />
|
|
51
|
+
{:else}
|
|
52
|
+
<slot />
|
|
53
|
+
{/if}
|
|
54
|
+
</div></td
|
|
55
|
+
></tr
|
|
56
|
+
>
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { SvelteComponent } from "svelte";
|
|
2
|
+
export interface TableEmptyProps {
|
|
3
|
+
/**
|
|
4
|
+
* Jumlah span kolom (colspan).
|
|
5
|
+
* @default 10
|
|
6
|
+
*/
|
|
7
|
+
colSpan?: number;
|
|
8
|
+
/**
|
|
9
|
+
* Judul pesan data kosong.
|
|
10
|
+
* @default 'Tidak ada dataset yang cocok'
|
|
11
|
+
*/
|
|
12
|
+
title?: string;
|
|
13
|
+
/**
|
|
14
|
+
* Deskripsi penjelasan data kosong.
|
|
15
|
+
* @default 'Atur ulang filter atau ubah kata kunci pencarian.'
|
|
16
|
+
*/
|
|
17
|
+
description?: string;
|
|
18
|
+
/**
|
|
19
|
+
* Teks tombol aksi reset / refresh.
|
|
20
|
+
* @default 'Atur ulang'
|
|
21
|
+
*/
|
|
22
|
+
actionLabel?: string;
|
|
23
|
+
/**
|
|
24
|
+
* Callback ketika tombol aksi diklik.
|
|
25
|
+
*/
|
|
26
|
+
onAction?: () => void;
|
|
27
|
+
/**
|
|
28
|
+
* Kustomisasi visual granular wadah tr empty (UiProps).
|
|
29
|
+
*/
|
|
30
|
+
ui?: UiProps;
|
|
31
|
+
/**
|
|
32
|
+
* Class CSS kustom.
|
|
33
|
+
*/
|
|
34
|
+
className?: string;
|
|
35
|
+
/**
|
|
36
|
+
* Konten kustom di dalam wadah empty state.
|
|
37
|
+
*/
|
|
38
|
+
children?: any;
|
|
39
|
+
}
|
|
40
|
+
import { UiProps } from "../../core/types";
|
|
41
|
+
declare const __propDef: {
|
|
42
|
+
props: {
|
|
43
|
+
className?: TableEmptyProps["className"];
|
|
44
|
+
ui?: TableEmptyProps["ui"];
|
|
45
|
+
colSpan?: TableEmptyProps["colSpan"];
|
|
46
|
+
title?: TableEmptyProps["title"];
|
|
47
|
+
description?: TableEmptyProps["description"];
|
|
48
|
+
actionLabel?: TableEmptyProps["actionLabel"];
|
|
49
|
+
onAction?: TableEmptyProps["onAction"];
|
|
50
|
+
};
|
|
51
|
+
events: {
|
|
52
|
+
[evt: string]: CustomEvent<any>;
|
|
53
|
+
};
|
|
54
|
+
slots: {
|
|
55
|
+
default: {};
|
|
56
|
+
};
|
|
57
|
+
exports?: {} | undefined;
|
|
58
|
+
bindings?: string | undefined;
|
|
59
|
+
};
|
|
60
|
+
type TableEmptyProps_ = typeof __propDef.props;
|
|
61
|
+
export type TableEmptyEvents = typeof __propDef.events;
|
|
62
|
+
export type TableEmptySlots = typeof __propDef.slots;
|
|
63
|
+
export default class TableEmpty extends SvelteComponent<TableEmptyProps_, TableEmptyEvents, TableEmptySlots> {
|
|
64
|
+
}
|
|
65
|
+
export {};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
<script context="module"></script>
|
|
2
|
+
|
|
3
|
+
<script>import { buildUiVars, UiProps } from "../../core/types";
|
|
4
|
+
export let className = void 0;
|
|
5
|
+
export let ui = void 0;
|
|
6
|
+
function stringifyStyles(stylesObj) {
|
|
7
|
+
let styles = "";
|
|
8
|
+
for (let key in stylesObj) {
|
|
9
|
+
const dashedKey = key.replace(/[A-Z]/g, function(match) {
|
|
10
|
+
return "-" + match.toLowerCase();
|
|
11
|
+
});
|
|
12
|
+
styles += dashedKey + ":" + stylesObj[key] + ";";
|
|
13
|
+
}
|
|
14
|
+
return styles;
|
|
15
|
+
}
|
|
16
|
+
</script>
|
|
17
|
+
|
|
18
|
+
<tfoot
|
|
19
|
+
style={stringifyStyles({
|
|
20
|
+
...buildUiVars(ui),
|
|
21
|
+
})}
|
|
22
|
+
class={`ttdk-table-footer ${className || ""}`.trim()}><slot /></tfoot
|
|
23
|
+
>
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { SvelteComponent } from "svelte";
|
|
2
|
+
export interface TableFooterProps {
|
|
3
|
+
/**
|
|
4
|
+
* Kustomisasi visual granular tfoot (UiProps).
|
|
5
|
+
*/
|
|
6
|
+
ui?: UiProps;
|
|
7
|
+
/**
|
|
8
|
+
* Class CSS kustom.
|
|
9
|
+
*/
|
|
10
|
+
className?: string;
|
|
11
|
+
/**
|
|
12
|
+
* Konten baris footer (TableRow).
|
|
13
|
+
*/
|
|
14
|
+
children?: any;
|
|
15
|
+
}
|
|
16
|
+
import { UiProps } from "../../core/types";
|
|
17
|
+
declare const __propDef: {
|
|
18
|
+
props: {
|
|
19
|
+
className?: TableFooterProps["className"];
|
|
20
|
+
ui?: TableFooterProps["ui"];
|
|
21
|
+
};
|
|
22
|
+
events: {
|
|
23
|
+
[evt: string]: CustomEvent<any>;
|
|
24
|
+
};
|
|
25
|
+
slots: {
|
|
26
|
+
default: {};
|
|
27
|
+
};
|
|
28
|
+
exports?: {} | undefined;
|
|
29
|
+
bindings?: string | undefined;
|
|
30
|
+
};
|
|
31
|
+
type TableFooterProps_ = typeof __propDef.props;
|
|
32
|
+
export type TableFooterEvents = typeof __propDef.events;
|
|
33
|
+
export type TableFooterSlots = typeof __propDef.slots;
|
|
34
|
+
export default class TableFooter extends SvelteComponent<TableFooterProps_, TableFooterEvents, TableFooterSlots> {
|
|
35
|
+
}
|
|
36
|
+
export {};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
<script context="module"></script>
|
|
2
|
+
|
|
3
|
+
<script>import { buildUiVars, UiProps } from "../../core/types";
|
|
4
|
+
export let className = void 0;
|
|
5
|
+
export let sortable = void 0;
|
|
6
|
+
export let align = void 0;
|
|
7
|
+
export let width = void 0;
|
|
8
|
+
export let ui = void 0;
|
|
9
|
+
export let onClick = void 0;
|
|
10
|
+
function stringifyStyles(stylesObj) {
|
|
11
|
+
let styles = "";
|
|
12
|
+
for (let key in stylesObj) {
|
|
13
|
+
const dashedKey = key.replace(/[A-Z]/g, function(match) {
|
|
14
|
+
return "-" + match.toLowerCase();
|
|
15
|
+
});
|
|
16
|
+
styles += dashedKey + ":" + stylesObj[key] + ";";
|
|
17
|
+
}
|
|
18
|
+
return styles;
|
|
19
|
+
}
|
|
20
|
+
</script>
|
|
21
|
+
|
|
22
|
+
<th
|
|
23
|
+
style={stringifyStyles({
|
|
24
|
+
textAlign: align || "left",
|
|
25
|
+
...(width
|
|
26
|
+
? {
|
|
27
|
+
width: width,
|
|
28
|
+
}
|
|
29
|
+
: {}),
|
|
30
|
+
...buildUiVars(ui),
|
|
31
|
+
})}
|
|
32
|
+
class={`ttdk-table-head ${className || ""}`.trim()}
|
|
33
|
+
data-sortable={sortable ? "true" : "false"}
|
|
34
|
+
on:click={(e) => {
|
|
35
|
+
if (onClick) {
|
|
36
|
+
onClick(e);
|
|
37
|
+
}
|
|
38
|
+
}}><slot /></th
|
|
39
|
+
>
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { SvelteComponent } from "svelte";
|
|
2
|
+
export interface TableHeadProps {
|
|
3
|
+
/**
|
|
4
|
+
* Penyelarasan teks header ('left' | 'center' | 'right').
|
|
5
|
+
* @default 'left'
|
|
6
|
+
*/
|
|
7
|
+
align?: "left" | "center" | "right";
|
|
8
|
+
/**
|
|
9
|
+
* Lebar kolom (misal: '120px', '25%').
|
|
10
|
+
*/
|
|
11
|
+
width?: string;
|
|
12
|
+
/**
|
|
13
|
+
* Menandakan kolom dapat disortir secara interaktif.
|
|
14
|
+
* @default false
|
|
15
|
+
*/
|
|
16
|
+
sortable?: boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Kustomisasi visual granular th (UiProps).
|
|
19
|
+
*/
|
|
20
|
+
ui?: UiProps;
|
|
21
|
+
/**
|
|
22
|
+
* Class CSS kustom.
|
|
23
|
+
*/
|
|
24
|
+
className?: string;
|
|
25
|
+
/**
|
|
26
|
+
* Fungsi callback saat header kolom diklik.
|
|
27
|
+
*/
|
|
28
|
+
onClick?: (event: any) => void;
|
|
29
|
+
/**
|
|
30
|
+
* Konten teks atau komponen di dalam header kolom.
|
|
31
|
+
*/
|
|
32
|
+
children?: any;
|
|
33
|
+
}
|
|
34
|
+
import { UiProps } from "../../core/types";
|
|
35
|
+
declare const __propDef: {
|
|
36
|
+
props: {
|
|
37
|
+
className?: TableHeadProps["className"];
|
|
38
|
+
sortable?: TableHeadProps["sortable"];
|
|
39
|
+
align?: TableHeadProps["align"];
|
|
40
|
+
width?: TableHeadProps["width"];
|
|
41
|
+
ui?: TableHeadProps["ui"];
|
|
42
|
+
onClick?: TableHeadProps["onClick"];
|
|
43
|
+
};
|
|
44
|
+
events: {
|
|
45
|
+
[evt: string]: CustomEvent<any>;
|
|
46
|
+
};
|
|
47
|
+
slots: {
|
|
48
|
+
default: {};
|
|
49
|
+
};
|
|
50
|
+
exports?: {} | undefined;
|
|
51
|
+
bindings?: string | undefined;
|
|
52
|
+
};
|
|
53
|
+
type TableHeadProps_ = typeof __propDef.props;
|
|
54
|
+
export type TableHeadEvents = typeof __propDef.events;
|
|
55
|
+
export type TableHeadSlots = typeof __propDef.slots;
|
|
56
|
+
export default class TableHead extends SvelteComponent<TableHeadProps_, TableHeadEvents, TableHeadSlots> {
|
|
57
|
+
}
|
|
58
|
+
export {};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
<script context="module"></script>
|
|
2
|
+
|
|
3
|
+
<script>import { buildUiVars, UiProps } from "../../core/types";
|
|
4
|
+
export let className = void 0;
|
|
5
|
+
export let ui = void 0;
|
|
6
|
+
function stringifyStyles(stylesObj) {
|
|
7
|
+
let styles = "";
|
|
8
|
+
for (let key in stylesObj) {
|
|
9
|
+
const dashedKey = key.replace(/[A-Z]/g, function(match) {
|
|
10
|
+
return "-" + match.toLowerCase();
|
|
11
|
+
});
|
|
12
|
+
styles += dashedKey + ":" + stylesObj[key] + ";";
|
|
13
|
+
}
|
|
14
|
+
return styles;
|
|
15
|
+
}
|
|
16
|
+
</script>
|
|
17
|
+
|
|
18
|
+
<thead
|
|
19
|
+
style={stringifyStyles({
|
|
20
|
+
...buildUiVars(ui),
|
|
21
|
+
})}
|
|
22
|
+
class={`ttdk-table-header ${className || ""}`.trim()}><slot /></thead
|
|
23
|
+
>
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { SvelteComponent } from "svelte";
|
|
2
|
+
export interface TableHeaderProps {
|
|
3
|
+
/**
|
|
4
|
+
* Kustomisasi visual granular thead (UiProps).
|
|
5
|
+
*/
|
|
6
|
+
ui?: UiProps;
|
|
7
|
+
/**
|
|
8
|
+
* Class CSS kustom.
|
|
9
|
+
*/
|
|
10
|
+
className?: string;
|
|
11
|
+
/**
|
|
12
|
+
* Konten baris header (TableRow).
|
|
13
|
+
*/
|
|
14
|
+
children?: any;
|
|
15
|
+
}
|
|
16
|
+
import { UiProps } from "../../core/types";
|
|
17
|
+
declare const __propDef: {
|
|
18
|
+
props: {
|
|
19
|
+
className?: TableHeaderProps["className"];
|
|
20
|
+
ui?: TableHeaderProps["ui"];
|
|
21
|
+
};
|
|
22
|
+
events: {
|
|
23
|
+
[evt: string]: CustomEvent<any>;
|
|
24
|
+
};
|
|
25
|
+
slots: {
|
|
26
|
+
default: {};
|
|
27
|
+
};
|
|
28
|
+
exports?: {} | undefined;
|
|
29
|
+
bindings?: string | undefined;
|
|
30
|
+
};
|
|
31
|
+
type TableHeaderProps_ = typeof __propDef.props;
|
|
32
|
+
export type TableHeaderEvents = typeof __propDef.events;
|
|
33
|
+
export type TableHeaderSlots = typeof __propDef.slots;
|
|
34
|
+
export default class TableHeader extends SvelteComponent<TableHeaderProps_, TableHeaderEvents, TableHeaderSlots> {
|
|
35
|
+
}
|
|
36
|
+
export {};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
<script context="module"></script>
|
|
2
|
+
|
|
3
|
+
<script>import { buildUiVars, UiProps } from "../../core/types";
|
|
4
|
+
export let className = void 0;
|
|
5
|
+
export let selected = void 0;
|
|
6
|
+
export let hoverable = void 0;
|
|
7
|
+
export let onClick = void 0;
|
|
8
|
+
export let ui = void 0;
|
|
9
|
+
function stringifyStyles(stylesObj) {
|
|
10
|
+
let styles = "";
|
|
11
|
+
for (let key in stylesObj) {
|
|
12
|
+
const dashedKey = key.replace(/[A-Z]/g, function(match) {
|
|
13
|
+
return "-" + match.toLowerCase();
|
|
14
|
+
});
|
|
15
|
+
styles += dashedKey + ":" + stylesObj[key] + ";";
|
|
16
|
+
}
|
|
17
|
+
return styles;
|
|
18
|
+
}
|
|
19
|
+
</script>
|
|
20
|
+
|
|
21
|
+
<tr
|
|
22
|
+
style={stringifyStyles({
|
|
23
|
+
...buildUiVars(ui),
|
|
24
|
+
})}
|
|
25
|
+
class={`ttdk-table-row ${className || ""}`.trim()}
|
|
26
|
+
data-selected={selected ? "true" : "false"}
|
|
27
|
+
data-hoverable={hoverable !== false ? "true" : "false"}
|
|
28
|
+
on:click={(e) => {
|
|
29
|
+
if (onClick) {
|
|
30
|
+
onClick(e);
|
|
31
|
+
}
|
|
32
|
+
}}><slot /></tr
|
|
33
|
+
>
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { SvelteComponent } from "svelte";
|
|
2
|
+
export interface TableRowProps {
|
|
3
|
+
/**
|
|
4
|
+
* Menandai baris sebagai aktif / terpilih (selected).
|
|
5
|
+
* @default false
|
|
6
|
+
*/
|
|
7
|
+
selected?: boolean;
|
|
8
|
+
/**
|
|
9
|
+
* Efek hover saat kursor melayang di atas baris.
|
|
10
|
+
*/
|
|
11
|
+
hoverable?: boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Kustomisasi visual granular tr (UiProps).
|
|
14
|
+
*/
|
|
15
|
+
ui?: UiProps;
|
|
16
|
+
/**
|
|
17
|
+
* Class CSS kustom.
|
|
18
|
+
*/
|
|
19
|
+
className?: string;
|
|
20
|
+
/**
|
|
21
|
+
* Fungsi callback saat baris diklik.
|
|
22
|
+
*/
|
|
23
|
+
onClick?: (event: any) => void;
|
|
24
|
+
/**
|
|
25
|
+
* Konten sel (TableCell atau TableHead).
|
|
26
|
+
*/
|
|
27
|
+
children?: any;
|
|
28
|
+
}
|
|
29
|
+
import { UiProps } from "../../core/types";
|
|
30
|
+
declare const __propDef: {
|
|
31
|
+
props: {
|
|
32
|
+
className?: TableRowProps["className"];
|
|
33
|
+
selected?: TableRowProps["selected"];
|
|
34
|
+
hoverable?: TableRowProps["hoverable"];
|
|
35
|
+
onClick?: TableRowProps["onClick"];
|
|
36
|
+
ui?: TableRowProps["ui"];
|
|
37
|
+
};
|
|
38
|
+
events: {
|
|
39
|
+
[evt: string]: CustomEvent<any>;
|
|
40
|
+
};
|
|
41
|
+
slots: {
|
|
42
|
+
default: {};
|
|
43
|
+
};
|
|
44
|
+
exports?: {} | undefined;
|
|
45
|
+
bindings?: string | undefined;
|
|
46
|
+
};
|
|
47
|
+
type TableRowProps_ = typeof __propDef.props;
|
|
48
|
+
export type TableRowEvents = typeof __propDef.events;
|
|
49
|
+
export type TableRowSlots = typeof __propDef.slots;
|
|
50
|
+
export default class TableRow extends SvelteComponent<TableRowProps_, TableRowEvents, TableRowSlots> {
|
|
51
|
+
}
|
|
52
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.ttdk-table-wrapper{width:100%;font-family:var(--ttdk-font-sans);background:var(--ttdk-bg-card);border:var(--ttdk-stroke-width-thin) solid var(--ttdk-stroke-subtle);--table-corner-radius:var(--ttdk-ui-border-radius,var(--ttdk-radius-sm,8px));border-radius:var(--table-corner-radius);box-shadow:var(--ttdk-shadow-sm);box-sizing:border-box;transition:background-color .2s,border-color .2s;position:relative;overflow:auto}.ttdk-table-wrapper[data-rounded=none]{--table-corner-radius:var(--ttdk-radius-none,0px)}.ttdk-table-wrapper[data-rounded=xs]{--table-corner-radius:var(--ttdk-radius-xs,6px)}.ttdk-table-wrapper[data-rounded=sm]{--table-corner-radius:var(--ttdk-radius-sm,8px)}.ttdk-table-wrapper[data-rounded=md]{--table-corner-radius:var(--ttdk-radius-md,12px)}.ttdk-table-wrapper[data-rounded=lg]{--table-corner-radius:var(--ttdk-radius-lg,16px)}.ttdk-table-wrapper[data-rounded=xl],.ttdk-table-wrapper[data-rounded=full]{--table-corner-radius:var(--ttdk-radius-xl,24px)}.ttdk-table-wrapper.rounded-none{--table-corner-radius:0px!important}.ttdk-table-wrapper.rounded-xs,.ttdk-table-wrapper.rounded-sm{--table-corner-radius:var(--ttdk-radius-xs,6px)!important}.ttdk-table-wrapper.rounded,.ttdk-table-wrapper.rounded-md{--table-corner-radius:var(--ttdk-radius-sm,8px)!important}.ttdk-table-wrapper.rounded-lg{--table-corner-radius:var(--ttdk-radius-md,12px)!important}.ttdk-table-wrapper.rounded-xl{--table-corner-radius:var(--ttdk-radius-lg,16px)!important}.ttdk-table-wrapper.rounded-2xl{--table-corner-radius:var(--ttdk-radius-xl,24px)!important}.ttdk-table-wrapper[data-shadow=none]{box-shadow:none}.ttdk-table-wrapper[data-shadow=sm]{box-shadow:var(--ttdk-shadow-sm)}.ttdk-table-wrapper[data-shadow=md]{box-shadow:var(--ttdk-shadow-md)}.ttdk-table-wrapper[data-shadow=lg]{box-shadow:var(--ttdk-shadow-lg)}.dark .ttdk-table-wrapper[data-shadow=none]{box-shadow:none}.dark .ttdk-table-wrapper[data-shadow=sm]{box-shadow:var(--ttdk-shadow-sm)}.dark .ttdk-table-wrapper[data-shadow=md]{box-shadow:var(--ttdk-shadow-md)}.dark .ttdk-table-wrapper[data-shadow=lg]{box-shadow:var(--ttdk-shadow-lg)}.ttdk-table-wrapper.shadow-none{box-shadow:none!important}.ttdk-table-wrapper.shadow-sm,.ttdk-table-wrapper.shadow{box-shadow:var(--ttdk-shadow-sm)!important}.ttdk-table-wrapper.shadow-md{box-shadow:var(--ttdk-shadow-md)!important}.ttdk-table-wrapper.shadow-lg,.ttdk-table-wrapper.shadow-xl{box-shadow:var(--ttdk-shadow-lg)!important}.dark .ttdk-table-wrapper{background:var(--ttdk-bg-card);border-color:var(--ttdk-stroke-subtle);box-shadow:var(--ttdk-shadow-sm)}.ttdk-table-loading-overlay{background:color-mix(in srgb, var(--ttdk-bg-card) 75%, transparent);z-index:10;backdrop-filter:blur(2px);justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.dark .ttdk-table-loading-overlay{background:color-mix(in srgb, var(--ttdk-bg-card) 75%, transparent)}.ttdk-table-spinner{fill:none;stroke:currentColor;stroke-width:2.2px;stroke-linecap:round;width:24px;height:24px;color:var(--ttdk-brand-default);animation:1.2s steps(12,end) infinite ttdk-table-spin}.ttdk-table-wrapper[data-size=sm] .ttdk-table-spinner,.ttdk-table-wrapper:has(.ttdk-table[data-size=sm]) .ttdk-table-spinner{width:18px;height:18px}.ttdk-table-wrapper[data-size=md] .ttdk-table-spinner,.ttdk-table-wrapper:has(.ttdk-table[data-size=md]) .ttdk-table-spinner{width:24px;height:24px}.ttdk-table-wrapper[data-size=lg] .ttdk-table-spinner,.ttdk-table-wrapper:has(.ttdk-table[data-size=lg]) .ttdk-table-spinner{width:32px;height:32px}@keyframes ttdk-table-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.ttdk-table{caption-side:bottom;border-collapse:collapse;text-align:left;width:100%;font-size:13px;line-height:1.5}.ttdk-table-wrapper[data-variant=clean],.ttdk-table-wrapper:has(.ttdk-table[data-variant=clean]){box-shadow:none;background:0 0;border:none;border-radius:0}.dark .ttdk-table-wrapper[data-variant=clean],.dark .ttdk-table-wrapper:has(.ttdk-table[data-variant=clean]){box-shadow:none;background:0 0;border:none}.ttdk-table-wrapper[data-variant=clean] .ttdk-table-header,.ttdk-table-wrapper:has(.ttdk-table[data-variant=clean]) .ttdk-table-header,.dark .ttdk-table-wrapper[data-variant=clean] .ttdk-table-header,.dark .ttdk-table-wrapper:has(.ttdk-table[data-variant=clean]) .ttdk-table-header{background:0 0}.ttdk-table[data-variant=clean]{border:none}.ttdk-table[data-sticky-header=true] .ttdk-table-head,.ttdk-table-wrapper[data-sticky-header=true] .ttdk-table-head,.ttdk-table-wrapper:has(.ttdk-table[data-sticky-header=true]) .ttdk-table-head{z-index:10;background:var(--ttdk-bg-secondary-disabled);box-shadow:inset 0 -1px 0 var(--ttdk-stroke-subtle);position:sticky;top:0}.dark .ttdk-table[data-sticky-header=true] .ttdk-table-head,.dark .ttdk-table-wrapper[data-sticky-header=true] .ttdk-table-head,.dark .ttdk-table-wrapper:has(.ttdk-table[data-sticky-header=true]) .ttdk-table-head{background:var(--ttdk-bg-secondary-disabled);box-shadow:inset 0 -1px 0 var(--ttdk-stroke-subtle)}.ttdk-table-wrapper[data-variant=clean][data-sticky-header=true] .ttdk-table-head,.ttdk-table-wrapper[data-variant=clean]:has(.ttdk-table[data-sticky-header=true]) .ttdk-table-head,.ttdk-table[data-variant=clean][data-sticky-header=true] .ttdk-table-head,.dark .ttdk-table-wrapper[data-variant=clean][data-sticky-header=true] .ttdk-table-head,.dark .ttdk-table-wrapper[data-variant=clean]:has(.ttdk-table[data-sticky-header=true]) .ttdk-table-head,.dark .ttdk-table[data-variant=clean][data-sticky-header=true] .ttdk-table-head{background:var(--ttdk-bg-card);box-shadow:inset 0 -1px 0 var(--ttdk-stroke-subtle)}.ttdk-table[data-size=sm] th,.ttdk-table[data-size=sm] td{padding:8px 12px;font-size:12px}.ttdk-table[data-size=md] th,.ttdk-table[data-size=md] td{padding:14px 16px;font-size:13px}.ttdk-table[data-size=lg] th,.ttdk-table[data-size=lg] td{padding:18px 20px;font-size:14px}.ttdk-table-header{background:var(--ttdk-bg-secondary-disabled);border-bottom:var(--ttdk-stroke-width-thin) solid var(--ttdk-stroke-subtle)}.dark .ttdk-table-header{background:var(--ttdk-bg-secondary-disabled);border-bottom-color:var(--ttdk-stroke-subtle)}.ttdk-table-head{height:44px;color:var(--ttdk-text-icon-secondary);letter-spacing:.2px;vertical-align:middle;border-bottom:var(--ttdk-stroke-width-thin) solid var(--ttdk-stroke-subtle);white-space:nowrap;user-select:none;padding:12px 16px;font-size:12px;font-weight:600;transition:background-color .15s,color .15s}.dark .ttdk-table-head{color:var(--ttdk-text-icon-secondary);border-bottom-color:var(--ttdk-stroke-subtle)}.ttdk-table-head[data-sortable=true]{cursor:pointer}.ttdk-table-head[data-sortable=true]:hover,.dark .ttdk-table-head[data-sortable=true]:hover{background:var(--ttdk-bg-secondary-disabled);color:var(--ttdk-text-icon-primary)}.ttdk-th-inner{align-items:center;gap:6px;display:inline-flex}.ttdk-table-body{border-bottom:0}.ttdk-table-row{border-bottom:var(--ttdk-stroke-width-thin) solid var(--ttdk-stroke-subtle);transition:background-color .15s}.dark .ttdk-table-row{border-bottom-color:var(--ttdk-stroke-subtle)}.ttdk-table-row:last-child{border-bottom:none}.ttdk-table[data-hoverable=true] .ttdk-table-row:hover,.ttdk-table-row[data-hoverable=true]:hover,.dark .ttdk-table[data-hoverable=true] .ttdk-table-row:hover,.dark .ttdk-table-row[data-hoverable=true]:hover,.ttdk-table[data-variant=striped] .ttdk-table-body .ttdk-table-row:nth-child(2n),.dark .ttdk-table[data-variant=striped] .ttdk-table-body .ttdk-table-row:nth-child(2n){background:var(--ttdk-bg-secondary-disabled)}.ttdk-table-row[data-selected=true]{background:var(--ttdk-bg-status-info-subtle)!important}.dark .ttdk-table-row[data-selected=true]{background:var(--ttdk-color-blue-900)!important}.ttdk-table-cell{color:var(--ttdk-ui-color,var(--ttdk-text-icon-primary));vertical-align:middle;padding:14px 16px}.dark .ttdk-table-cell{color:var(--ttdk-ui-color,var(--ttdk-text-icon-primary))}.ttdk-table-footer{background:var(--ttdk-bg-secondary-disabled);border-top:var(--ttdk-stroke-width-thin) solid var(--ttdk-stroke-subtle);color:var(--ttdk-ui-color,var(--ttdk-text-icon-primary));font-weight:500}.dark .ttdk-table-footer{background:var(--ttdk-bg-secondary-disabled);border-top-color:var(--ttdk-stroke-subtle);color:var(--ttdk-ui-color,var(--ttdk-text-icon-primary))}.ttdk-table-caption{color:var(--ttdk-text-icon-secondary);text-align:center;margin-top:12px;padding:0 16px 12px;font-size:12px}.dark .ttdk-table-caption{color:var(--ttdk-text-icon-secondary)}.ttdk-table-empty-wrapper{text-align:center;flex-direction:column;justify-content:center;align-items:center;padding:56px 24px;display:flex}.ttdk-table-empty-title{color:var(--ttdk-text-icon-primary);margin:0;font-size:14px;font-weight:700}.dark .ttdk-table-empty-title{color:var(--ttdk-text-icon-primary)}.ttdk-table-empty-desc{color:var(--ttdk-text-icon-secondary);margin:4px 0 0;font-size:12px}.dark .ttdk-table-empty-desc{color:var(--ttdk-text-icon-secondary)}.ttdk-table-empty-action{color:var(--ttdk-brand-default);cursor:pointer;border-radius:var(--ttdk-radius-input-sm);background:0 0;border:none;margin-top:12px;padding:4px 8px;font-size:13px;font-weight:600;transition:color .15s}.ttdk-table-empty-action:hover{text-decoration:underline}.dark .ttdk-table-empty-action{color:var(--ttdk-brand-default)}.ttdk-cell-title-group{flex-direction:column;gap:2px;display:flex}.ttdk-cell-main-title{color:var(--ttdk-text-icon-primary);font-size:13px;font-weight:600}.dark .ttdk-cell-main-title{color:var(--ttdk-text-icon-primary)}.ttdk-cell-subtitle{color:var(--ttdk-text-icon-secondary);font-size:11px}.dark .ttdk-cell-subtitle{color:var(--ttdk-text-icon-secondary)}.ttdk-format-badges{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.ttdk-format-tag{border-radius:var(--ttdk-radius-input-sm);background:var(--ttdk-bg-secondary-disabled);color:var(--ttdk-text-icon-primary);border:var(--ttdk-stroke-width-thin) solid var(--ttdk-stroke-subtle);padding:2px 6px;font-size:11px;font-weight:600}.dark .ttdk-format-tag{background:var(--ttdk-bg-secondary-disabled);border-color:var(--ttdk-stroke-subtle);color:var(--ttdk-text-icon-primary)}.ttdk-view-count{color:var(--ttdk-text-icon-secondary);align-items:center;gap:6px;font-size:12px;display:flex}.dark .ttdk-view-count{color:var(--ttdk-text-icon-secondary)}.ttdk-btn-fav{border-radius:var(--ttdk-radius-xs);border:var(--ttdk-stroke-width-thin) solid var(--ttdk-stroke-subtle);width:32px;height:32px;color:var(--ttdk-text-icon-secondary);cursor:pointer;background:0 0;justify-content:center;align-items:center;padding:0;transition:all .15s;display:inline-flex}.ttdk-btn-fav:hover{background:var(--ttdk-bg-secondary-disabled);border-color:var(--ttdk-stroke-strong)}.dark .ttdk-btn-fav{border-color:var(--ttdk-stroke-subtle);color:var(--ttdk-text-icon-secondary)}.dark .ttdk-btn-fav:hover{background:var(--ttdk-bg-secondary-disabled);color:var(--ttdk-text-icon-primary)}.ttdk-btn-fav.active{background:var(--ttdk-brand-default);border-color:var(--ttdk-brand-default);color:var(--ttdk-color-neutral-white)}
|