@ttdk-design-system/library-vue 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 +1096 -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.vue +432 -0
- package/src/web/accordion/accordion.vue.d.ts +227 -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.vue +290 -0
- package/src/web/alert/alert.vue.d.ts +154 -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.vue +217 -0
- package/src/web/avatar/avatar.vue.d.ts +135 -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.vue +135 -0
- package/src/web/badge/badge.vue.d.ts +108 -0
- package/src/web/badge/index.ts +3 -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.vue +303 -0
- package/src/web/banner/banner.vue.d.ts +162 -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.vue +313 -0
- package/src/web/breadcrumb/breadcrumb.vue.d.ts +139 -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.vue +283 -0
- package/src/web/button/button.vue.d.ts +147 -0
- package/src/web/button/index.ts +3 -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.vue +1536 -0
- package/src/web/calendar/calendar.vue.d.ts +261 -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.vue +423 -0
- package/src/web/card/card.vue.d.ts +232 -0
- package/src/web/card/index.ts +3 -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.vue +304 -0
- package/src/web/checkbox/checkbox.vue.d.ts +189 -0
- package/src/web/checkbox/index.ts +3 -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.vue +220 -0
- package/src/web/chip/chip.vue.d.ts +140 -0
- package/src/web/chip/index.ts +3 -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.vue +1257 -0
- package/src/web/dropdown/dropdown.vue.d.ts +381 -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.vue +94 -0
- package/src/web/flex/flex-item.vue.d.ts +84 -0
- package/src/web/flex/flex.css +1 -0
- package/src/web/flex/flex.vue +103 -0
- package/src/web/flex/flex.vue.d.ts +92 -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.vue +109 -0
- package/src/web/grid/grid-item.vue.d.ts +99 -0
- package/src/web/grid/grid.css +1 -0
- package/src/web/grid/grid.vue +94 -0
- package/src/web/grid/grid.vue.d.ts +84 -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.vue +521 -0
- package/src/web/input/input.vue.d.ts +274 -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.vue +1153 -0
- package/src/web/input-number/input-number.vue.d.ts +343 -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.vue +344 -0
- package/src/web/modal/modal.vue.d.ts +64 -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.vue +42 -0
- package/src/web/pagination/pagination-content.vue.d.ts +28 -0
- package/src/web/pagination/pagination-ellipsis.vue +55 -0
- package/src/web/pagination/pagination-ellipsis.vue.d.ts +28 -0
- package/src/web/pagination/pagination-first.vue +161 -0
- package/src/web/pagination/pagination-first.vue.d.ts +67 -0
- package/src/web/pagination/pagination-item.vue +42 -0
- package/src/web/pagination/pagination-item.vue.d.ts +28 -0
- package/src/web/pagination/pagination-last.vue +161 -0
- package/src/web/pagination/pagination-last.vue.d.ts +67 -0
- package/src/web/pagination/pagination-link.vue +118 -0
- package/src/web/pagination/pagination-link.vue.d.ts +61 -0
- package/src/web/pagination/pagination-next.vue +160 -0
- package/src/web/pagination/pagination-next.vue.d.ts +68 -0
- package/src/web/pagination/pagination-previous.vue +160 -0
- package/src/web/pagination/pagination-previous.vue.d.ts +68 -0
- package/src/web/pagination/pagination.css +1 -0
- package/src/web/pagination/pagination.vue +730 -0
- package/src/web/pagination/pagination.vue.d.ts +247 -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.vue +579 -0
- package/src/web/popover/popover.vue.d.ts +83 -0
- package/src/web/radio/AI_GUIDE.md +155 -0
- package/src/web/radio/index.ts +3 -0
- package/src/web/radio/manifest.json +294 -0
- package/src/web/radio/radio.css +1 -0
- package/src/web/radio/radio.vue +288 -0
- package/src/web/radio/radio.vue.d.ts +182 -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.vue +1024 -0
- package/src/web/selectbox/selectbox.vue.d.ts +300 -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.vue +180 -0
- package/src/web/sonner/sonner.vue.d.ts +113 -0
- package/src/web/table/AI_GUIDE.md +145 -0
- package/src/web/table/index.ts +34 -0
- package/src/web/table/manifest.json +168 -0
- package/src/web/table/table-body.vue +42 -0
- package/src/web/table/table-body.vue.d.ts +28 -0
- package/src/web/table/table-caption.vue +42 -0
- package/src/web/table/table-caption.vue.d.ts +28 -0
- package/src/web/table/table-cell.vue +71 -0
- package/src/web/table/table-cell.vue.d.ts +49 -0
- package/src/web/table/table-empty.vue +105 -0
- package/src/web/table/table-empty.vue.d.ts +57 -0
- package/src/web/table/table-footer.vue +42 -0
- package/src/web/table/table-footer.vue.d.ts +28 -0
- package/src/web/table/table-head.vue +78 -0
- package/src/web/table/table-head.vue.d.ts +50 -0
- package/src/web/table/table-header.vue +42 -0
- package/src/web/table/table-header.vue.d.ts +28 -0
- package/src/web/table/table-row.vue +70 -0
- package/src/web/table/table-row.vue.d.ts +44 -0
- package/src/web/table/table.css +1 -0
- package/src/web/table/table.vue +298 -0
- package/src/web/table/table.vue.d.ts +119 -0
- package/src/web/tabs/AI_GUIDE.md +150 -0
- package/src/web/tabs/index.ts +2 -0
- package/src/web/tabs/manifest.json +315 -0
- package/src/web/tabs/tabs.css +1 -0
- package/src/web/tabs/tabs.vue +164 -0
- package/src/web/tabs/tabs.vue.d.ts +60 -0
- package/src/web/text/AI_GUIDE.md +129 -0
- package/src/web/text/index.ts +2 -0
- package/src/web/text/manifest.json +195 -0
- package/src/web/text/text.css +1 -0
- package/src/web/text/text.vue +195 -0
- package/src/web/text/text.vue.d.ts +161 -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.vue +458 -0
- package/src/web/textarea/textarea.vue.d.ts +265 -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.vue +417 -0
- package/src/web/tooltip/tooltip.vue.d.ts +150 -0
- package/src/webview/bottomsheet/AI_GUIDE.md +141 -0
- package/src/webview/bottomsheet/bottomsheet.css +1 -0
- package/src/webview/bottomsheet/bottomsheet.vue +441 -0
- package/src/webview/bottomsheet/bottomsheet.vue.d.ts +178 -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.vue +138 -0
- package/src/webview/button/button-ios.vue.d.ts +102 -0
- package/src/webview/button/button-material.css +1 -0
- package/src/webview/button/button-material.vue +138 -0
- package/src/webview/button/button-material.vue.d.ts +102 -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,94 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div
|
|
3
|
+
:class="`ttdk-flex-item ${className || ''}`.trim()"
|
|
4
|
+
:style="{
|
|
5
|
+
...buildFlexItemVars(props),
|
|
6
|
+
...buildUiVars(ui),
|
|
7
|
+
...(typeof style === 'object' ? style : {}),
|
|
8
|
+
}"
|
|
9
|
+
>
|
|
10
|
+
<slot />
|
|
11
|
+
</div>
|
|
12
|
+
</template>
|
|
13
|
+
|
|
14
|
+
<script setup lang="ts">
|
|
15
|
+
import { buildFlexItemVars, buildUiVars, UiProps } from "../../core/types";
|
|
16
|
+
|
|
17
|
+
export interface FlexItemBreakpointProps {
|
|
18
|
+
/**
|
|
19
|
+
* Urutan tampilan elemen di dalam container flex (order).
|
|
20
|
+
*/
|
|
21
|
+
order?: number | string;
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Kemampuan elemen untuk tumbuh mengisi sisa ruang (flex-grow).
|
|
25
|
+
* True bernilai 1, False bernilai 0, atau angka kustom.
|
|
26
|
+
*/
|
|
27
|
+
grow?: number | boolean;
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Kemampuan elemen untuk menyusut jika ruang tidak mencukupi (flex-shrink).
|
|
31
|
+
* True bernilai 1, False bernilai 0, atau angka kustom.
|
|
32
|
+
*/
|
|
33
|
+
shrink?: number | boolean;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Ukuran dasar awal elemen sebelum ruang dibagi (flex-basis).
|
|
37
|
+
* (misal: "200px", "50%", 0, "auto").
|
|
38
|
+
*/
|
|
39
|
+
basis?: string | number;
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Perataan individu elemen pada sumbu silang (align-self).
|
|
43
|
+
*/
|
|
44
|
+
alignSelf?: "auto" | "start" | "center" | "end" | "stretch";
|
|
45
|
+
}
|
|
46
|
+
export interface FlexItemProps extends FlexItemBreakpointProps {
|
|
47
|
+
/**
|
|
48
|
+
* Override pada breakpoint sm (min-width: 640px).
|
|
49
|
+
*/
|
|
50
|
+
sm?: FlexItemBreakpointProps;
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Override pada breakpoint md (min-width: 768px).
|
|
54
|
+
*/
|
|
55
|
+
md?: FlexItemBreakpointProps;
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Override pada breakpoint lg (min-width: 1024px).
|
|
59
|
+
*/
|
|
60
|
+
lg?: FlexItemBreakpointProps;
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Override pada breakpoint xl (min-width: 1280px).
|
|
64
|
+
*/
|
|
65
|
+
xl?: FlexItemBreakpointProps;
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Override pada breakpoint xxl / 2xl (min-width: 1536px).
|
|
69
|
+
*/
|
|
70
|
+
xxl?: FlexItemBreakpointProps;
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Kustomisasi visual granular root kontainer (UiProps).
|
|
74
|
+
*/
|
|
75
|
+
ui?: UiProps;
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Class CSS kustom.
|
|
79
|
+
*/
|
|
80
|
+
className?: string;
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Style kustom inline.
|
|
84
|
+
*/
|
|
85
|
+
style?: any;
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Konten di dalam FlexItem.
|
|
89
|
+
*/
|
|
90
|
+
children?: any;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
const props = defineProps<FlexItemProps>();
|
|
94
|
+
</script>
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
// Auto-generated by TTDK Design System Vue Type Generator
|
|
3
|
+
import type { DefineComponent } from "vue";
|
|
4
|
+
import { buildFlexItemVars, buildUiVars, UiProps } from "../../core/types";
|
|
5
|
+
|
|
6
|
+
export interface FlexItemBreakpointProps {
|
|
7
|
+
/**
|
|
8
|
+
* Urutan tampilan elemen di dalam container flex (order).
|
|
9
|
+
*/
|
|
10
|
+
order?: number | string;
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Kemampuan elemen untuk tumbuh mengisi sisa ruang (flex-grow).
|
|
14
|
+
* True bernilai 1, False bernilai 0, atau angka kustom.
|
|
15
|
+
*/
|
|
16
|
+
grow?: number | boolean;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Kemampuan elemen untuk menyusut jika ruang tidak mencukupi (flex-shrink).
|
|
20
|
+
* True bernilai 1, False bernilai 0, atau angka kustom.
|
|
21
|
+
*/
|
|
22
|
+
shrink?: number | boolean;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Ukuran dasar awal elemen sebelum ruang dibagi (flex-basis).
|
|
26
|
+
* (misal: "200px", "50%", 0, "auto").
|
|
27
|
+
*/
|
|
28
|
+
basis?: string | number;
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Perataan individu elemen pada sumbu silang (align-self).
|
|
32
|
+
*/
|
|
33
|
+
alignSelf?: "auto" | "start" | "center" | "end" | "stretch";
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export interface FlexItemProps extends FlexItemBreakpointProps {
|
|
37
|
+
/**
|
|
38
|
+
* Override pada breakpoint sm (min-width: 640px).
|
|
39
|
+
*/
|
|
40
|
+
sm?: FlexItemBreakpointProps;
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Override pada breakpoint md (min-width: 768px).
|
|
44
|
+
*/
|
|
45
|
+
md?: FlexItemBreakpointProps;
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Override pada breakpoint lg (min-width: 1024px).
|
|
49
|
+
*/
|
|
50
|
+
lg?: FlexItemBreakpointProps;
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Override pada breakpoint xl (min-width: 1280px).
|
|
54
|
+
*/
|
|
55
|
+
xl?: FlexItemBreakpointProps;
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Override pada breakpoint xxl / 2xl (min-width: 1536px).
|
|
59
|
+
*/
|
|
60
|
+
xxl?: FlexItemBreakpointProps;
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Kustomisasi visual granular root kontainer (UiProps).
|
|
64
|
+
*/
|
|
65
|
+
ui?: UiProps;
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Class CSS kustom.
|
|
69
|
+
*/
|
|
70
|
+
className?: string;
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Style kustom inline.
|
|
74
|
+
*/
|
|
75
|
+
style?: any;
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Konten di dalam FlexItem.
|
|
79
|
+
*/
|
|
80
|
+
children?: any;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
declare const component: DefineComponent<FlexItemProps>;
|
|
84
|
+
export default component;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.ttdk-flex{box-sizing:border-box;flex-direction:var(--ttdk-flex-direction,row);justify-content:var(--ttdk-flex-justify-content,flex-start);align-items:var(--ttdk-flex-align-items,stretch);gap:var(--ttdk-flex-gap,0);flex-wrap:var(--ttdk-flex-wrap,nowrap);display:flex}.ttdk-flex[data-inline=true]{display:inline-flex}.ttdk-flex-item{box-sizing:border-box;order:var(--ttdk-flex-item-order,0);flex-grow:var(--ttdk-flex-item-grow,0);flex-shrink:var(--ttdk-flex-item-shrink,1);flex-basis:var(--ttdk-flex-item-basis,auto);align-self:var(--ttdk-flex-item-align-self,auto)}@media (width>=640px){.ttdk-flex{flex-direction:var(--ttdk-flex-direction-sm,var(--ttdk-flex-direction,row));justify-content:var(--ttdk-flex-justify-content-sm,var(--ttdk-flex-justify-content,flex-start));align-items:var(--ttdk-flex-align-items-sm,var(--ttdk-flex-align-items,stretch));gap:var(--ttdk-flex-gap-sm,var(--ttdk-flex-gap,0));flex-wrap:var(--ttdk-flex-wrap-sm,var(--ttdk-flex-wrap,nowrap))}.ttdk-flex-item{order:var(--ttdk-flex-item-order-sm,var(--ttdk-flex-item-order,0));flex-grow:var(--ttdk-flex-item-grow-sm,var(--ttdk-flex-item-grow,0));flex-shrink:var(--ttdk-flex-item-shrink-sm,var(--ttdk-flex-item-shrink,1));flex-basis:var(--ttdk-flex-item-basis-sm,var(--ttdk-flex-item-basis,auto));align-self:var(--ttdk-flex-item-align-self-sm,var(--ttdk-flex-item-align-self,auto))}}@media (width>=768px){.ttdk-flex{flex-direction:var(--ttdk-flex-direction-md,var(--ttdk-flex-direction-sm,var(--ttdk-flex-direction,row)));justify-content:var(--ttdk-flex-justify-content-md,var(--ttdk-flex-justify-content-sm,var(--ttdk-flex-justify-content,flex-start)));align-items:var(--ttdk-flex-align-items-md,var(--ttdk-flex-align-items-sm,var(--ttdk-flex-align-items,stretch)));gap:var(--ttdk-flex-gap-md,var(--ttdk-flex-gap-sm,var(--ttdk-flex-gap,0)));flex-wrap:var(--ttdk-flex-wrap-md,var(--ttdk-flex-wrap-sm,var(--ttdk-flex-wrap,nowrap)))}.ttdk-flex-item{order:var(--ttdk-flex-item-order-md,var(--ttdk-flex-item-order-sm,var(--ttdk-flex-item-order,0)));flex-grow:var(--ttdk-flex-item-grow-md,var(--ttdk-flex-item-grow-sm,var(--ttdk-flex-item-grow,0)));flex-shrink:var(--ttdk-flex-item-shrink-md,var(--ttdk-flex-item-shrink-sm,var(--ttdk-flex-item-shrink,1)));flex-basis:var(--ttdk-flex-item-basis-md,var(--ttdk-flex-item-basis-sm,var(--ttdk-flex-item-basis,auto)));align-self:var(--ttdk-flex-item-align-self-md,var(--ttdk-flex-item-align-self-sm,var(--ttdk-flex-item-align-self,auto)))}}@media (width>=1024px){.ttdk-flex{flex-direction:var(--ttdk-flex-direction-lg,var(--ttdk-flex-direction-md,var(--ttdk-flex-direction-sm,var(--ttdk-flex-direction,row))));justify-content:var(--ttdk-flex-justify-content-lg,var(--ttdk-flex-justify-content-md,var(--ttdk-flex-justify-content-sm,var(--ttdk-flex-justify-content,flex-start))));align-items:var(--ttdk-flex-align-items-lg,var(--ttdk-flex-align-items-md,var(--ttdk-flex-align-items-sm,var(--ttdk-flex-align-items,stretch))));gap:var(--ttdk-flex-gap-lg,var(--ttdk-flex-gap-md,var(--ttdk-flex-gap-sm,var(--ttdk-flex-gap,0))));flex-wrap:var(--ttdk-flex-wrap-lg,var(--ttdk-flex-wrap-md,var(--ttdk-flex-wrap-sm,var(--ttdk-flex-wrap,nowrap))))}.ttdk-flex-item{order:var(--ttdk-flex-item-order-lg,var(--ttdk-flex-item-order-md,var(--ttdk-flex-item-order-sm,var(--ttdk-flex-item-order,0))));flex-grow:var(--ttdk-flex-item-grow-lg,var(--ttdk-flex-item-grow-md,var(--ttdk-flex-item-grow-sm,var(--ttdk-flex-item-grow,0))));flex-shrink:var(--ttdk-flex-item-shrink-lg,var(--ttdk-flex-item-shrink-md,var(--ttdk-flex-item-shrink-sm,var(--ttdk-flex-item-shrink,1))));flex-basis:var(--ttdk-flex-item-basis-lg,var(--ttdk-flex-item-basis-md,var(--ttdk-flex-item-basis-sm,var(--ttdk-flex-item-basis,auto))));align-self:var(--ttdk-flex-item-align-self-lg,var(--ttdk-flex-item-align-self-md,var(--ttdk-flex-item-align-self-sm,var(--ttdk-flex-item-align-self,auto))))}}@media (width>=1280px){.ttdk-flex{flex-direction:var(--ttdk-flex-direction-xl,var(--ttdk-flex-direction-lg,var(--ttdk-flex-direction-md,var(--ttdk-flex-direction-sm,var(--ttdk-flex-direction,row)))));justify-content:var(--ttdk-flex-justify-content-xl,var(--ttdk-flex-justify-content-lg,var(--ttdk-flex-justify-content-md,var(--ttdk-flex-justify-content-sm,var(--ttdk-flex-justify-content,flex-start)))));align-items:var(--ttdk-flex-align-items-xl,var(--ttdk-flex-align-items-lg,var(--ttdk-flex-align-items-md,var(--ttdk-flex-align-items-sm,var(--ttdk-flex-align-items,stretch)))));gap:var(--ttdk-flex-gap-xl,var(--ttdk-flex-gap-lg,var(--ttdk-flex-gap-md,var(--ttdk-flex-gap-sm,var(--ttdk-flex-gap,0)))));flex-wrap:var(--ttdk-flex-wrap-xl,var(--ttdk-flex-wrap-lg,var(--ttdk-flex-wrap-md,var(--ttdk-flex-wrap-sm,var(--ttdk-flex-wrap,nowrap)))))}.ttdk-flex-item{order:var(--ttdk-flex-item-order-xl,var(--ttdk-flex-item-order-lg,var(--ttdk-flex-item-order-md,var(--ttdk-flex-item-order-sm,var(--ttdk-flex-item-order,0)))));flex-grow:var(--ttdk-flex-item-grow-xl,var(--ttdk-flex-item-grow-lg,var(--ttdk-flex-item-grow-md,var(--ttdk-flex-item-grow-sm,var(--ttdk-flex-item-grow,0)))));flex-shrink:var(--ttdk-flex-item-shrink-xl,var(--ttdk-flex-item-shrink-lg,var(--ttdk-flex-item-shrink-md,var(--ttdk-flex-item-shrink-sm,var(--ttdk-flex-item-shrink,1)))));flex-basis:var(--ttdk-flex-item-basis-xl,var(--ttdk-flex-item-basis-lg,var(--ttdk-flex-item-basis-md,var(--ttdk-flex-item-basis-sm,var(--ttdk-flex-item-basis,auto)))));align-self:var(--ttdk-flex-item-align-self-xl,var(--ttdk-flex-item-align-self-lg,var(--ttdk-flex-item-align-self-md,var(--ttdk-flex-item-align-self-sm,var(--ttdk-flex-item-align-self,auto)))))}}@media (width>=1536px){.ttdk-flex{flex-direction:var(--ttdk-flex-direction-2xl,var(--ttdk-flex-direction-xl,var(--ttdk-flex-direction-lg,var(--ttdk-flex-direction-md,var(--ttdk-flex-direction-sm,var(--ttdk-flex-direction,row))))));justify-content:var(--ttdk-flex-justify-content-2xl,var(--ttdk-flex-justify-content-xl,var(--ttdk-flex-justify-content-lg,var(--ttdk-flex-justify-content-md,var(--ttdk-flex-justify-content-sm,var(--ttdk-flex-justify-content,flex-start))))));align-items:var(--ttdk-flex-align-items-2xl,var(--ttdk-flex-align-items-xl,var(--ttdk-flex-align-items-lg,var(--ttdk-flex-align-items-md,var(--ttdk-flex-align-items-sm,var(--ttdk-flex-align-items,stretch))))));gap:var(--ttdk-flex-gap-2xl,var(--ttdk-flex-gap-xl,var(--ttdk-flex-gap-lg,var(--ttdk-flex-gap-md,var(--ttdk-flex-gap-sm,var(--ttdk-flex-gap,0))))));flex-wrap:var(--ttdk-flex-wrap-2xl,var(--ttdk-flex-wrap-xl,var(--ttdk-flex-wrap-lg,var(--ttdk-flex-wrap-md,var(--ttdk-flex-wrap-sm,var(--ttdk-flex-wrap,nowrap))))))}.ttdk-flex-item{order:var(--ttdk-flex-item-order-2xl,var(--ttdk-flex-item-order-xl,var(--ttdk-flex-item-order-lg,var(--ttdk-flex-item-order-md,var(--ttdk-flex-item-order-sm,var(--ttdk-flex-item-order,0))))));flex-grow:var(--ttdk-flex-item-grow-2xl,var(--ttdk-flex-item-grow-xl,var(--ttdk-flex-item-grow-lg,var(--ttdk-flex-item-grow-md,var(--ttdk-flex-item-grow-sm,var(--ttdk-flex-item-grow,0))))));flex-shrink:var(--ttdk-flex-item-shrink-2xl,var(--ttdk-flex-item-shrink-xl,var(--ttdk-flex-item-shrink-lg,var(--ttdk-flex-item-shrink-md,var(--ttdk-flex-item-shrink-sm,var(--ttdk-flex-item-shrink,1))))));flex-basis:var(--ttdk-flex-item-basis-2xl,var(--ttdk-flex-item-basis-xl,var(--ttdk-flex-item-basis-lg,var(--ttdk-flex-item-basis-md,var(--ttdk-flex-item-basis-sm,var(--ttdk-flex-item-basis,auto))))));align-self:var(--ttdk-flex-item-align-self-2xl,var(--ttdk-flex-item-align-self-xl,var(--ttdk-flex-item-align-self-lg,var(--ttdk-flex-item-align-self-md,var(--ttdk-flex-item-align-self-sm,var(--ttdk-flex-item-align-self,auto))))))}}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div
|
|
3
|
+
:class="`ttdk-flex ${className || ''}`.trim()"
|
|
4
|
+
:data-inline="inline ? 'true' : 'false'"
|
|
5
|
+
:style="{
|
|
6
|
+
...buildFlexVars(props),
|
|
7
|
+
...buildUiVars(ui),
|
|
8
|
+
...(typeof style === 'object' ? style : {}),
|
|
9
|
+
}"
|
|
10
|
+
>
|
|
11
|
+
<slot />
|
|
12
|
+
</div>
|
|
13
|
+
</template>
|
|
14
|
+
|
|
15
|
+
<script setup lang="ts">
|
|
16
|
+
import { buildFlexVars, buildUiVars, UiProps } from "../../core/types";
|
|
17
|
+
|
|
18
|
+
export interface FlexBreakpointProps {
|
|
19
|
+
/**
|
|
20
|
+
* Arah susunan elemen anak (flex-direction).
|
|
21
|
+
* @default 'row'
|
|
22
|
+
*/
|
|
23
|
+
direction?: "row" | "column" | "row-reverse" | "column-reverse";
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Distribusi ruang antar elemen anak pada sumbu utama (justify-content).
|
|
27
|
+
* @default 'start'
|
|
28
|
+
*/
|
|
29
|
+
justifyContent?: "start" | "center" | "end" | "around" | "between" | "evenly";
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Perataan elemen anak pada sumbu silang (align-items).
|
|
33
|
+
* @default 'stretch'
|
|
34
|
+
*/
|
|
35
|
+
alignItems?: "start" | "center" | "end" | "stretch";
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Jarak celah antar elemen anak (gap).
|
|
39
|
+
* Nilai dapat berupa angka pixel atau string unit CSS (misal: 12, "16px", "var(--ttdk-spacing-16)").
|
|
40
|
+
*/
|
|
41
|
+
gap?: string | number;
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Membungkus elemen anak jika melebihi lebar kontainer (flex-wrap).
|
|
45
|
+
* @default 'nowrap'
|
|
46
|
+
*/
|
|
47
|
+
wrap?: "nowrap" | "wrap" | "wrap-reverse";
|
|
48
|
+
}
|
|
49
|
+
export interface FlexProps extends FlexBreakpointProps {
|
|
50
|
+
/**
|
|
51
|
+
* Menggunakan display 'inline-flex' daripada 'flex'.
|
|
52
|
+
* @default false
|
|
53
|
+
*/
|
|
54
|
+
inline?: boolean;
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Override pada breakpoint sm (min-width: 640px).
|
|
58
|
+
*/
|
|
59
|
+
sm?: FlexBreakpointProps;
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Override pada breakpoint md (min-width: 768px).
|
|
63
|
+
*/
|
|
64
|
+
md?: FlexBreakpointProps;
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Override pada breakpoint lg (min-width: 1024px).
|
|
68
|
+
*/
|
|
69
|
+
lg?: FlexBreakpointProps;
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Override pada breakpoint xl (min-width: 1280px).
|
|
73
|
+
*/
|
|
74
|
+
xl?: FlexBreakpointProps;
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Override pada breakpoint xxl / 2xl (min-width: 1536px).
|
|
78
|
+
*/
|
|
79
|
+
xxl?: FlexBreakpointProps;
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Kustomisasi visual granular root kontainer (UiProps).
|
|
83
|
+
*/
|
|
84
|
+
ui?: UiProps;
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Class CSS kustom.
|
|
88
|
+
*/
|
|
89
|
+
className?: string;
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Style kustom inline.
|
|
93
|
+
*/
|
|
94
|
+
style?: any;
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Konten anak di dalam Flex.
|
|
98
|
+
*/
|
|
99
|
+
children?: any;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
const props = defineProps<FlexProps>();
|
|
103
|
+
</script>
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
// Auto-generated by TTDK Design System Vue Type Generator
|
|
3
|
+
import type { DefineComponent } from "vue";
|
|
4
|
+
import { buildFlexVars, buildUiVars, UiProps } from "../../core/types";
|
|
5
|
+
|
|
6
|
+
export interface FlexBreakpointProps {
|
|
7
|
+
/**
|
|
8
|
+
* Arah susunan elemen anak (flex-direction).
|
|
9
|
+
* @default 'row'
|
|
10
|
+
*/
|
|
11
|
+
direction?: "row" | "column" | "row-reverse" | "column-reverse";
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Distribusi ruang antar elemen anak pada sumbu utama (justify-content).
|
|
15
|
+
* @default 'start'
|
|
16
|
+
*/
|
|
17
|
+
justifyContent?: "start" | "center" | "end" | "around" | "between" | "evenly";
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Perataan elemen anak pada sumbu silang (align-items).
|
|
21
|
+
* @default 'stretch'
|
|
22
|
+
*/
|
|
23
|
+
alignItems?: "start" | "center" | "end" | "stretch";
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Jarak celah antar elemen anak (gap).
|
|
27
|
+
* Nilai dapat berupa angka pixel atau string unit CSS (misal: 12, "16px", "var(--ttdk-spacing-16)").
|
|
28
|
+
*/
|
|
29
|
+
gap?: string | number;
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Membungkus elemen anak jika melebihi lebar kontainer (flex-wrap).
|
|
33
|
+
* @default 'nowrap'
|
|
34
|
+
*/
|
|
35
|
+
wrap?: "nowrap" | "wrap" | "wrap-reverse";
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export interface FlexProps extends FlexBreakpointProps {
|
|
39
|
+
/**
|
|
40
|
+
* Menggunakan display 'inline-flex' daripada 'flex'.
|
|
41
|
+
* @default false
|
|
42
|
+
*/
|
|
43
|
+
inline?: boolean;
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Override pada breakpoint sm (min-width: 640px).
|
|
47
|
+
*/
|
|
48
|
+
sm?: FlexBreakpointProps;
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Override pada breakpoint md (min-width: 768px).
|
|
52
|
+
*/
|
|
53
|
+
md?: FlexBreakpointProps;
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Override pada breakpoint lg (min-width: 1024px).
|
|
57
|
+
*/
|
|
58
|
+
lg?: FlexBreakpointProps;
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Override pada breakpoint xl (min-width: 1280px).
|
|
62
|
+
*/
|
|
63
|
+
xl?: FlexBreakpointProps;
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Override pada breakpoint xxl / 2xl (min-width: 1536px).
|
|
67
|
+
*/
|
|
68
|
+
xxl?: FlexBreakpointProps;
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Kustomisasi visual granular root kontainer (UiProps).
|
|
72
|
+
*/
|
|
73
|
+
ui?: UiProps;
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Class CSS kustom.
|
|
77
|
+
*/
|
|
78
|
+
className?: string;
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Style kustom inline.
|
|
82
|
+
*/
|
|
83
|
+
style?: any;
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Konten anak di dalam Flex.
|
|
87
|
+
*/
|
|
88
|
+
children?: any;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
declare const component: DefineComponent<FlexProps>;
|
|
92
|
+
export default component;
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@ttdk-design-system/flex",
|
|
3
|
+
"component": "Flex",
|
|
4
|
+
"folder": "flex",
|
|
5
|
+
"description": "TTDK Flex component with multi-theme support.",
|
|
6
|
+
"stylesheets": [
|
|
7
|
+
{
|
|
8
|
+
"theme": "common",
|
|
9
|
+
"file": "flex.css",
|
|
10
|
+
"importPath": "web/flex/flex.css"
|
|
11
|
+
}
|
|
12
|
+
],
|
|
13
|
+
"props": {
|
|
14
|
+
"inline": {
|
|
15
|
+
"name": "inline",
|
|
16
|
+
"type": "boolean",
|
|
17
|
+
"optional": true,
|
|
18
|
+
"default": "false",
|
|
19
|
+
"description": "Menggunakan display 'inline-flex' daripada 'flex'.",
|
|
20
|
+
"example": null,
|
|
21
|
+
"param": null
|
|
22
|
+
},
|
|
23
|
+
"sm": {
|
|
24
|
+
"name": "sm",
|
|
25
|
+
"type": "FlexBreakpointProps",
|
|
26
|
+
"optional": true,
|
|
27
|
+
"default": null,
|
|
28
|
+
"description": "Override pada breakpoint sm (min-width: 640px).",
|
|
29
|
+
"example": null,
|
|
30
|
+
"param": null
|
|
31
|
+
},
|
|
32
|
+
"md": {
|
|
33
|
+
"name": "md",
|
|
34
|
+
"type": "FlexBreakpointProps",
|
|
35
|
+
"optional": true,
|
|
36
|
+
"default": null,
|
|
37
|
+
"description": "Override pada breakpoint md (min-width: 768px).",
|
|
38
|
+
"example": null,
|
|
39
|
+
"param": null
|
|
40
|
+
},
|
|
41
|
+
"lg": {
|
|
42
|
+
"name": "lg",
|
|
43
|
+
"type": "FlexBreakpointProps",
|
|
44
|
+
"optional": true,
|
|
45
|
+
"default": null,
|
|
46
|
+
"description": "Override pada breakpoint lg (min-width: 1024px).",
|
|
47
|
+
"example": null,
|
|
48
|
+
"param": null
|
|
49
|
+
},
|
|
50
|
+
"xl": {
|
|
51
|
+
"name": "xl",
|
|
52
|
+
"type": "FlexBreakpointProps",
|
|
53
|
+
"optional": true,
|
|
54
|
+
"default": null,
|
|
55
|
+
"description": "Override pada breakpoint xl (min-width: 1280px).",
|
|
56
|
+
"example": null,
|
|
57
|
+
"param": null
|
|
58
|
+
},
|
|
59
|
+
"xxl": {
|
|
60
|
+
"name": "xxl",
|
|
61
|
+
"type": "FlexBreakpointProps",
|
|
62
|
+
"optional": true,
|
|
63
|
+
"default": null,
|
|
64
|
+
"description": "Override pada breakpoint xxl / 2xl (min-width: 1536px).",
|
|
65
|
+
"example": null,
|
|
66
|
+
"param": null
|
|
67
|
+
},
|
|
68
|
+
"ui": {
|
|
69
|
+
"name": "ui",
|
|
70
|
+
"type": "UiProps",
|
|
71
|
+
"optional": true,
|
|
72
|
+
"default": null,
|
|
73
|
+
"description": "Kustomisasi visual granular root kontainer (UiProps).",
|
|
74
|
+
"example": null,
|
|
75
|
+
"param": null
|
|
76
|
+
},
|
|
77
|
+
"className": {
|
|
78
|
+
"name": "className",
|
|
79
|
+
"type": "string",
|
|
80
|
+
"optional": true,
|
|
81
|
+
"default": null,
|
|
82
|
+
"description": "Class CSS kustom.",
|
|
83
|
+
"example": null,
|
|
84
|
+
"param": null
|
|
85
|
+
},
|
|
86
|
+
"style": {
|
|
87
|
+
"name": "style",
|
|
88
|
+
"type": "any",
|
|
89
|
+
"optional": true,
|
|
90
|
+
"default": null,
|
|
91
|
+
"description": "Style kustom inline.",
|
|
92
|
+
"example": null,
|
|
93
|
+
"param": null
|
|
94
|
+
},
|
|
95
|
+
"children": {
|
|
96
|
+
"name": "children",
|
|
97
|
+
"type": "any",
|
|
98
|
+
"optional": true,
|
|
99
|
+
"default": null,
|
|
100
|
+
"description": "Konten anak di dalam Flex.",
|
|
101
|
+
"example": null,
|
|
102
|
+
"param": null
|
|
103
|
+
}
|
|
104
|
+
},
|
|
105
|
+
"subInterfaces": {
|
|
106
|
+
"FlexBreakpointProps": {
|
|
107
|
+
"direction": {
|
|
108
|
+
"name": "direction",
|
|
109
|
+
"type": "'row' | 'column' | 'row-reverse' | 'column-reverse'",
|
|
110
|
+
"optional": true,
|
|
111
|
+
"default": "row",
|
|
112
|
+
"description": "Arah susunan elemen anak (flex-direction).",
|
|
113
|
+
"example": null,
|
|
114
|
+
"param": null
|
|
115
|
+
},
|
|
116
|
+
"justifyContent": {
|
|
117
|
+
"name": "justifyContent",
|
|
118
|
+
"type": "'start' | 'center' | 'end' | 'around' | 'between' | 'evenly'",
|
|
119
|
+
"optional": true,
|
|
120
|
+
"default": "start",
|
|
121
|
+
"description": "Distribusi ruang antar elemen anak pada sumbu utama (justify-content).",
|
|
122
|
+
"example": null,
|
|
123
|
+
"param": null
|
|
124
|
+
},
|
|
125
|
+
"alignItems": {
|
|
126
|
+
"name": "alignItems",
|
|
127
|
+
"type": "'start' | 'center' | 'end' | 'stretch'",
|
|
128
|
+
"optional": true,
|
|
129
|
+
"default": "stretch",
|
|
130
|
+
"description": "Perataan elemen anak pada sumbu silang (align-items).",
|
|
131
|
+
"example": null,
|
|
132
|
+
"param": null
|
|
133
|
+
},
|
|
134
|
+
"gap": {
|
|
135
|
+
"name": "gap",
|
|
136
|
+
"type": "string | number",
|
|
137
|
+
"optional": true,
|
|
138
|
+
"default": null,
|
|
139
|
+
"description": "Jarak celah antar elemen anak (gap). Nilai dapat berupa angka pixel atau string unit CSS (misal: 12, \"16px\", \"var(--ttdk-spacing-16)\").",
|
|
140
|
+
"example": null,
|
|
141
|
+
"param": null
|
|
142
|
+
},
|
|
143
|
+
"wrap": {
|
|
144
|
+
"name": "wrap",
|
|
145
|
+
"type": "'nowrap' | 'wrap' | 'wrap-reverse'",
|
|
146
|
+
"optional": true,
|
|
147
|
+
"default": "nowrap",
|
|
148
|
+
"description": "Membungkus elemen anak jika melebihi lebar kontainer (flex-wrap).",
|
|
149
|
+
"example": null,
|
|
150
|
+
"param": null
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
},
|
|
154
|
+
"supportedFrameworks": [
|
|
155
|
+
"react",
|
|
156
|
+
"vue",
|
|
157
|
+
"svelte"
|
|
158
|
+
],
|
|
159
|
+
"themes": [
|
|
160
|
+
"tw"
|
|
161
|
+
]
|
|
162
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
# <Grid /> — TTDK Component Reference
|
|
2
|
+
|
|
3
|
+
TTDK Grid 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/grid/grid.css";`
|
|
8
|
+
|
|
9
|
+
## 2. Subpath Component Import
|
|
10
|
+
```ts
|
|
11
|
+
// React
|
|
12
|
+
import Grid from "@ttdk-design-system/library-react/web/grid";
|
|
13
|
+
|
|
14
|
+
// Vue 3
|
|
15
|
+
import Grid from "@ttdk-design-system/library-vue/web/grid";
|
|
16
|
+
|
|
17
|
+
// Svelte
|
|
18
|
+
import Grid from "@ttdk-design-system/library-svelte/web/grid";
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## 3. Props & API Reference
|
|
22
|
+
|
|
23
|
+
| Prop | Type | Default | Description |
|
|
24
|
+
| :--- | :--- | :--- | :--- |
|
|
25
|
+
| `sm?` | `GridBreakpointProps` | `-` | Override pada breakpoint sm (min-width: 640px). |
|
|
26
|
+
| `md?` | `GridBreakpointProps` | `-` | Override pada breakpoint md (min-width: 768px). |
|
|
27
|
+
| `lg?` | `GridBreakpointProps` | `-` | Override pada breakpoint lg (min-width: 1024px). |
|
|
28
|
+
| `xl?` | `GridBreakpointProps` | `-` | Override pada breakpoint xl (min-width: 1280px). |
|
|
29
|
+
| `xxl?` | `GridBreakpointProps` | `-` | Override pada breakpoint xxl / 2xl (min-width: 1536px). |
|
|
30
|
+
| `ui?` | `UiProps` | `-` | Kustomisasi visual granular root kontainer (UiProps). |
|
|
31
|
+
| `className?` | `string` | `-` | Class CSS kustom. |
|
|
32
|
+
| `style?` | `any` | `-` | Style kustom inline. |
|
|
33
|
+
| `children?` | `any` | `-` | Konten anak di dalam Grid (<GridItem>). |
|
|
34
|
+
|
|
35
|
+
### Sub-interface: `GridBreakpointProps`
|
|
36
|
+
|
|
37
|
+
| Field | Type | Default | Description |
|
|
38
|
+
| :--- | :--- | :--- | :--- |
|
|
39
|
+
| `templateColumns?` | `string | number` | `-` | Jumlah atau pola template kolom pada grid (grid-template-columns). Nilai angka (misal: 3 atau 12) otomatis dikonversi ke repeat(N, minmax(0, 1fr)). Nilai string (misal: "200px 1fr 2fr", "repeat(4, 1fr)"). |
|
|
40
|
+
| `templateRows?` | `string | number` | `-` | Jumlah atau pola template baris pada grid (grid-template-rows). |
|
|
41
|
+
| `gap?` | `string | number` | `-` | Jarak celah antar baris dan kolom (gap). Nilai angka (misal: 16) atau string (misal: "16px", "1rem", "var(--ttdk-spacing-16)"). |
|
|
42
|
+
| `justifyContent?` | `'start' | 'center' | 'end' | 'around' | 'between' | 'evenly'` | `-` | Distribusi horizontal keseluruhan grid container (justify-content). |
|
|
43
|
+
| `alignContent?` | `'evenly' | 'around' | 'between' | 'center' | 'start' | 'end'` | `-` | Distribusi vertikal baris di dalam grid container (align-content). |
|
|
44
|
+
|
|
45
|
+
## 4. Usage Examples
|
|
46
|
+
|
|
47
|
+
### React Example
|
|
48
|
+
```tsx
|
|
49
|
+
import { Grid, GridItem } from "@ttdk-design-system/library-react/grid";
|
|
50
|
+
import "@ttdk-design-system/library-react/grid/grid.css";
|
|
51
|
+
|
|
52
|
+
export function Example() {
|
|
53
|
+
return (
|
|
54
|
+
<Grid
|
|
55
|
+
templateColumns={1}
|
|
56
|
+
gap="16px"
|
|
57
|
+
md={{ templateColumns: 12 }}
|
|
58
|
+
>
|
|
59
|
+
<GridItem col={12} md={{ col: 8 }}>
|
|
60
|
+
<div style={{ background: '#f4f4f5', padding: '16px' }}>Area Utama (8 Kolom)</div>
|
|
61
|
+
</GridItem>
|
|
62
|
+
<GridItem col={12} md={{ col: 4 }}>
|
|
63
|
+
<div style={{ background: '#e4e4e7', padding: '16px' }}>Sidebar (4 Kolom)</div>
|
|
64
|
+
</GridItem>
|
|
65
|
+
</Grid>
|
|
66
|
+
);
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### Vue 3 Example
|
|
71
|
+
```vue
|
|
72
|
+
<script setup lang="ts">
|
|
73
|
+
import { Grid, GridItem } from "@ttdk-design-system/library-vue/grid";
|
|
74
|
+
import "@ttdk-design-system/library-vue/grid/grid.css";
|
|
75
|
+
</script>
|
|
76
|
+
|
|
77
|
+
<template>
|
|
78
|
+
<Grid
|
|
79
|
+
:templateColumns="1"
|
|
80
|
+
gap="16px"
|
|
81
|
+
:md="{ templateColumns: 12 }"
|
|
82
|
+
>
|
|
83
|
+
<GridItem :col="12" :md="{ col: 8 }">
|
|
84
|
+
<div style="background: #f4f4f5; padding: 16px;">Area Utama (8 Kolom)</div>
|
|
85
|
+
</GridItem>
|
|
86
|
+
<GridItem :col="12" :md="{ col: 4 }">
|
|
87
|
+
<div style="background: #e4e4e7; padding: 16px;">Sidebar (4 Kolom)</div>
|
|
88
|
+
</GridItem>
|
|
89
|
+
</Grid>
|
|
90
|
+
</template>
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### Svelte Example
|
|
94
|
+
```svelte
|
|
95
|
+
<script lang="ts">
|
|
96
|
+
import { Grid, GridItem } from "@ttdk-design-system/library-svelte/grid";
|
|
97
|
+
import "@ttdk-design-system/library-svelte/grid/grid.css";
|
|
98
|
+
</script>
|
|
99
|
+
|
|
100
|
+
<Grid
|
|
101
|
+
templateColumns={1}
|
|
102
|
+
gap="16px"
|
|
103
|
+
md={{ templateColumns: 12 }}
|
|
104
|
+
>
|
|
105
|
+
<GridItem col={12} md={{ col: 8 }}>
|
|
106
|
+
<div style="background: #f4f4f5; padding: 16px;">Area Utama (8 Kolom)</div>
|
|
107
|
+
</GridItem>
|
|
108
|
+
<GridItem col={12} md={{ col: 4 }}>
|
|
109
|
+
<div style="background: #e4e4e7; padding: 16px;">Sidebar (4 Kolom)</div>
|
|
110
|
+
</GridItem>
|
|
111
|
+
</Grid>
|
|
112
|
+
```
|