@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,97 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
|
|
3
|
+
export interface FlexItemBreakpointProps {
|
|
4
|
+
/**
|
|
5
|
+
* Urutan tampilan elemen di dalam container flex (order).
|
|
6
|
+
*/
|
|
7
|
+
order?: number | string;
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Kemampuan elemen untuk tumbuh mengisi sisa ruang (flex-grow).
|
|
11
|
+
* True bernilai 1, False bernilai 0, atau angka kustom.
|
|
12
|
+
*/
|
|
13
|
+
grow?: number | boolean;
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Kemampuan elemen untuk menyusut jika ruang tidak mencukupi (flex-shrink).
|
|
17
|
+
* True bernilai 1, False bernilai 0, atau angka kustom.
|
|
18
|
+
*/
|
|
19
|
+
shrink?: number | boolean;
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Ukuran dasar awal elemen sebelum ruang dibagi (flex-basis).
|
|
23
|
+
* (misal: "200px", "50%", 0, "auto").
|
|
24
|
+
*/
|
|
25
|
+
basis?: string | number;
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Perataan individu elemen pada sumbu silang (align-self).
|
|
29
|
+
*/
|
|
30
|
+
alignSelf?: "auto" | "start" | "center" | "end" | "stretch";
|
|
31
|
+
}
|
|
32
|
+
export interface FlexItemProps extends FlexItemBreakpointProps {
|
|
33
|
+
/**
|
|
34
|
+
* Override pada breakpoint sm (min-width: 640px).
|
|
35
|
+
*/
|
|
36
|
+
sm?: FlexItemBreakpointProps;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Override pada breakpoint md (min-width: 768px).
|
|
40
|
+
*/
|
|
41
|
+
md?: FlexItemBreakpointProps;
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Override pada breakpoint lg (min-width: 1024px).
|
|
45
|
+
*/
|
|
46
|
+
lg?: FlexItemBreakpointProps;
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Override pada breakpoint xl (min-width: 1280px).
|
|
50
|
+
*/
|
|
51
|
+
xl?: FlexItemBreakpointProps;
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Override pada breakpoint xxl / 2xl (min-width: 1536px).
|
|
55
|
+
*/
|
|
56
|
+
xxl?: FlexItemBreakpointProps;
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Kustomisasi visual granular root kontainer (UiProps).
|
|
60
|
+
*/
|
|
61
|
+
ui?: UiProps;
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Class CSS kustom.
|
|
65
|
+
*/
|
|
66
|
+
className?: string;
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Style kustom inline.
|
|
70
|
+
*/
|
|
71
|
+
style?: React.CSSProperties;
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Konten di dalam FlexItem.
|
|
75
|
+
*/
|
|
76
|
+
children?: any;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
import { buildFlexItemVars, buildUiVars, UiProps } from "../../core/types";
|
|
80
|
+
|
|
81
|
+
function FlexItem(props: FlexItemProps) {
|
|
82
|
+
return (
|
|
83
|
+
<div
|
|
84
|
+
className={`ttdk-flex-item ${props.className || ""}`.trim()}
|
|
85
|
+
style={{
|
|
86
|
+
...buildFlexItemVars(props),
|
|
87
|
+
...buildUiVars(props.ui),
|
|
88
|
+
...((props as any)["style"] || {}),
|
|
89
|
+
...props.style,
|
|
90
|
+
}}
|
|
91
|
+
>
|
|
92
|
+
<>{props.children}</>
|
|
93
|
+
</div>
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
export default FlexItem;
|
|
@@ -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,108 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
|
|
3
|
+
export interface FlexBreakpointProps {
|
|
4
|
+
/**
|
|
5
|
+
* Arah susunan elemen anak (flex-direction).
|
|
6
|
+
* @default 'row'
|
|
7
|
+
*/
|
|
8
|
+
direction?: "row" | "column" | "row-reverse" | "column-reverse";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Distribusi ruang antar elemen anak pada sumbu utama (justify-content).
|
|
12
|
+
* @default 'start'
|
|
13
|
+
*/
|
|
14
|
+
justifyContent?: "start" | "center" | "end" | "around" | "between" | "evenly";
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Perataan elemen anak pada sumbu silang (align-items).
|
|
18
|
+
* @default 'stretch'
|
|
19
|
+
*/
|
|
20
|
+
alignItems?: "start" | "center" | "end" | "stretch";
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Jarak celah antar elemen anak (gap).
|
|
24
|
+
* Nilai dapat berupa angka pixel atau string unit CSS (misal: 12, "16px", "var(--ttdk-spacing-16)").
|
|
25
|
+
*/
|
|
26
|
+
gap?: string | number;
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Membungkus elemen anak jika melebihi lebar kontainer (flex-wrap).
|
|
30
|
+
* @default 'nowrap'
|
|
31
|
+
*/
|
|
32
|
+
wrap?: "nowrap" | "wrap" | "wrap-reverse";
|
|
33
|
+
}
|
|
34
|
+
export interface FlexProps extends FlexBreakpointProps {
|
|
35
|
+
/**
|
|
36
|
+
* Menggunakan display 'inline-flex' daripada 'flex'.
|
|
37
|
+
* @default false
|
|
38
|
+
*/
|
|
39
|
+
inline?: boolean;
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Override pada breakpoint sm (min-width: 640px).
|
|
43
|
+
*/
|
|
44
|
+
sm?: FlexBreakpointProps;
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Override pada breakpoint md (min-width: 768px).
|
|
48
|
+
*/
|
|
49
|
+
md?: FlexBreakpointProps;
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Override pada breakpoint lg (min-width: 1024px).
|
|
53
|
+
*/
|
|
54
|
+
lg?: FlexBreakpointProps;
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Override pada breakpoint xl (min-width: 1280px).
|
|
58
|
+
*/
|
|
59
|
+
xl?: FlexBreakpointProps;
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Override pada breakpoint xxl / 2xl (min-width: 1536px).
|
|
63
|
+
*/
|
|
64
|
+
xxl?: FlexBreakpointProps;
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Kustomisasi visual granular root kontainer (UiProps).
|
|
68
|
+
*/
|
|
69
|
+
ui?: UiProps;
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Class CSS kustom.
|
|
73
|
+
*/
|
|
74
|
+
className?: string;
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Style kustom inline.
|
|
78
|
+
*/
|
|
79
|
+
style?: React.CSSProperties;
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Konten anak di dalam Flex.
|
|
83
|
+
*/
|
|
84
|
+
children?: any;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
import { buildFlexVars, buildUiVars, UiProps } from "../../core/types";
|
|
88
|
+
|
|
89
|
+
function Flex(props: FlexProps) {
|
|
90
|
+
return (
|
|
91
|
+
<div
|
|
92
|
+
className={`ttdk-flex ${props.className || ""}`.trim()}
|
|
93
|
+
data-inline={props.inline ? "true" : "false"}
|
|
94
|
+
style={{
|
|
95
|
+
...buildFlexVars(props),
|
|
96
|
+
...buildUiVars(props.ui),
|
|
97
|
+
...((props as any)["style"] || {}),
|
|
98
|
+
...props.style,
|
|
99
|
+
}}
|
|
100
|
+
>
|
|
101
|
+
<>{props.children}</>
|
|
102
|
+
</div>
|
|
103
|
+
);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
export default Flex;
|
|
107
|
+
|
|
108
|
+
export { Flex };
|
|
@@ -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
|
+
```
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
|
|
3
|
+
export interface GridItemBreakpointProps {
|
|
4
|
+
/**
|
|
5
|
+
* Jumlah kolom yang ditempati item ini (grid-column).
|
|
6
|
+
* Nilai angka N (misal: 6 atau 12) otomatis dikonversi ke 'span N / span N'.
|
|
7
|
+
* Nilai string (misal: "span 4", "1 / -1", "auto").
|
|
8
|
+
*/
|
|
9
|
+
col?: number | string;
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Posisi awal garis kolom (grid-column-start).
|
|
13
|
+
*/
|
|
14
|
+
colStart?: number | string;
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Posisi akhir garis kolom (grid-column-end).
|
|
18
|
+
*/
|
|
19
|
+
colEnd?: number | string;
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Jumlah baris yang ditempati item ini (grid-row).
|
|
23
|
+
* Nilai angka N otomatis dikonversi ke 'span N / span N'.
|
|
24
|
+
*/
|
|
25
|
+
row?: number | string;
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Posisi awal garis baris (grid-row-start).
|
|
29
|
+
*/
|
|
30
|
+
rowStart?: number | string;
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Posisi akhir garis baris (grid-row-end).
|
|
34
|
+
*/
|
|
35
|
+
rowEnd?: number | string;
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Perataan horizontal item di dalam sel grid (justify-self).
|
|
39
|
+
*/
|
|
40
|
+
justifySelf?: "auto" | "start" | "center" | "end" | "stretch";
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Urutan tampilan item di dalam grid (order).
|
|
44
|
+
*/
|
|
45
|
+
order?: number | string;
|
|
46
|
+
}
|
|
47
|
+
export interface GridItemProps extends GridItemBreakpointProps {
|
|
48
|
+
/**
|
|
49
|
+
* Override pada breakpoint sm (min-width: 640px).
|
|
50
|
+
*/
|
|
51
|
+
sm?: GridItemBreakpointProps;
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Override pada breakpoint md (min-width: 768px).
|
|
55
|
+
*/
|
|
56
|
+
md?: GridItemBreakpointProps;
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Override pada breakpoint lg (min-width: 1024px).
|
|
60
|
+
*/
|
|
61
|
+
lg?: GridItemBreakpointProps;
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Override pada breakpoint xl (min-width: 1280px).
|
|
65
|
+
*/
|
|
66
|
+
xl?: GridItemBreakpointProps;
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Override pada breakpoint xxl / 2xl (min-width: 1536px).
|
|
70
|
+
*/
|
|
71
|
+
xxl?: GridItemBreakpointProps;
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Kustomisasi visual granular root kontainer (UiProps).
|
|
75
|
+
*/
|
|
76
|
+
ui?: UiProps;
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Class CSS kustom.
|
|
80
|
+
*/
|
|
81
|
+
className?: string;
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Style kustom inline.
|
|
85
|
+
*/
|
|
86
|
+
style?: React.CSSProperties;
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Konten di dalam item grid.
|
|
90
|
+
*/
|
|
91
|
+
children?: any;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
import { buildGridItemVars, buildUiVars, UiProps } from "../../core/types";
|
|
95
|
+
|
|
96
|
+
function GridItem(props: GridItemProps) {
|
|
97
|
+
return (
|
|
98
|
+
<div
|
|
99
|
+
className={`ttdk-grid-item ${props.className || ""}`.trim()}
|
|
100
|
+
style={{
|
|
101
|
+
...buildGridItemVars(props),
|
|
102
|
+
...buildUiVars(props.ui),
|
|
103
|
+
...((props as any)["style"] || {}),
|
|
104
|
+
...props.style,
|
|
105
|
+
}}
|
|
106
|
+
>
|
|
107
|
+
<>{props.children}</>
|
|
108
|
+
</div>
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
export default GridItem;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.ttdk-grid{box-sizing:border-box;grid-template-columns:var(--ttdk-grid-template-columns,repeat(1, minmax(0, 1fr)));grid-template-rows:var(--ttdk-grid-template-rows,auto);gap:var(--ttdk-grid-gap,0);justify-content:var(--ttdk-grid-justify-content,normal);align-content:var(--ttdk-grid-align-content,normal);display:grid}.ttdk-grid-item{box-sizing:border-box;grid-column:var(--ttdk-grid-item-col,auto);grid-row:var(--ttdk-grid-item-row,auto);justify-self:var(--ttdk-grid-item-justify-self,auto);order:var(--ttdk-grid-item-order,0);min-width:0}@media (width>=640px){.ttdk-grid{grid-template-columns:var(--ttdk-grid-template-columns-sm,var(--ttdk-grid-template-columns,repeat(1, minmax(0, 1fr))));grid-template-rows:var(--ttdk-grid-template-rows-sm,var(--ttdk-grid-template-rows,auto));gap:var(--ttdk-grid-gap-sm,var(--ttdk-grid-gap,0));justify-content:var(--ttdk-grid-justify-content-sm,var(--ttdk-grid-justify-content,normal));align-content:var(--ttdk-grid-align-content-sm,var(--ttdk-grid-align-content,normal))}.ttdk-grid-item{grid-column:var(--ttdk-grid-item-col-sm,var(--ttdk-grid-item-col,auto));grid-row:var(--ttdk-grid-item-row-sm,var(--ttdk-grid-item-row,auto));justify-self:var(--ttdk-grid-item-justify-self-sm,var(--ttdk-grid-item-justify-self,auto));order:var(--ttdk-grid-item-order-sm,var(--ttdk-grid-item-order,0))}}@media (width>=768px){.ttdk-grid{grid-template-columns:var(--ttdk-grid-template-columns-md,var(--ttdk-grid-template-columns-sm,var(--ttdk-grid-template-columns,repeat(1, minmax(0, 1fr)))));grid-template-rows:var(--ttdk-grid-template-rows-md,var(--ttdk-grid-template-rows-sm,var(--ttdk-grid-template-rows,auto)));gap:var(--ttdk-grid-gap-md,var(--ttdk-grid-gap-sm,var(--ttdk-grid-gap,0)));justify-content:var(--ttdk-grid-justify-content-md,var(--ttdk-grid-justify-content-sm,var(--ttdk-grid-justify-content,normal)));align-content:var(--ttdk-grid-align-content-md,var(--ttdk-grid-align-content-sm,var(--ttdk-grid-align-content,normal)))}.ttdk-grid-item{grid-column:var(--ttdk-grid-item-col-md,var(--ttdk-grid-item-col-sm,var(--ttdk-grid-item-col,auto)));grid-row:var(--ttdk-grid-item-row-md,var(--ttdk-grid-item-row-sm,var(--ttdk-grid-item-row,auto)));justify-self:var(--ttdk-grid-item-justify-self-md,var(--ttdk-grid-item-justify-self-sm,var(--ttdk-grid-item-justify-self,auto)));order:var(--ttdk-grid-item-order-md,var(--ttdk-grid-item-order-sm,var(--ttdk-grid-item-order,0)))}}@media (width>=1024px){.ttdk-grid{grid-template-columns:var(--ttdk-grid-template-columns-lg,var(--ttdk-grid-template-columns-md,var(--ttdk-grid-template-columns-sm,var(--ttdk-grid-template-columns,repeat(1, minmax(0, 1fr))))));grid-template-rows:var(--ttdk-grid-template-rows-lg,var(--ttdk-grid-template-rows-md,var(--ttdk-grid-template-rows-sm,var(--ttdk-grid-template-rows,auto))));gap:var(--ttdk-grid-gap-lg,var(--ttdk-grid-gap-md,var(--ttdk-grid-gap-sm,var(--ttdk-grid-gap,0))));justify-content:var(--ttdk-grid-justify-content-lg,var(--ttdk-grid-justify-content-md,var(--ttdk-grid-justify-content-sm,var(--ttdk-grid-justify-content,normal))));align-content:var(--ttdk-grid-align-content-lg,var(--ttdk-grid-align-content-md,var(--ttdk-grid-align-content-sm,var(--ttdk-grid-align-content,normal))))}.ttdk-grid-item{grid-column:var(--ttdk-grid-item-col-lg,var(--ttdk-grid-item-col-md,var(--ttdk-grid-item-col-sm,var(--ttdk-grid-item-col,auto))));grid-row:var(--ttdk-grid-item-row-lg,var(--ttdk-grid-item-row-md,var(--ttdk-grid-item-row-sm,var(--ttdk-grid-item-row,auto))));justify-self:var(--ttdk-grid-item-justify-self-lg,var(--ttdk-grid-item-justify-self-md,var(--ttdk-grid-item-justify-self-sm,var(--ttdk-grid-item-justify-self,auto))));order:var(--ttdk-grid-item-order-lg,var(--ttdk-grid-item-order-md,var(--ttdk-grid-item-order-sm,var(--ttdk-grid-item-order,0))))}}@media (width>=1280px){.ttdk-grid{grid-template-columns:var(--ttdk-grid-template-columns-xl,var(--ttdk-grid-template-columns-lg,var(--ttdk-grid-template-columns-md,var(--ttdk-grid-template-columns-sm,var(--ttdk-grid-template-columns,repeat(1, minmax(0, 1fr)))))));grid-template-rows:var(--ttdk-grid-template-rows-xl,var(--ttdk-grid-template-rows-lg,var(--ttdk-grid-template-rows-md,var(--ttdk-grid-template-rows-sm,var(--ttdk-grid-template-rows,auto)))));gap:var(--ttdk-grid-gap-xl,var(--ttdk-grid-gap-lg,var(--ttdk-grid-gap-md,var(--ttdk-grid-gap-sm,var(--ttdk-grid-gap,0)))));justify-content:var(--ttdk-grid-justify-content-xl,var(--ttdk-grid-justify-content-lg,var(--ttdk-grid-justify-content-md,var(--ttdk-grid-justify-content-sm,var(--ttdk-grid-justify-content,normal)))));align-content:var(--ttdk-grid-align-content-xl,var(--ttdk-grid-align-content-lg,var(--ttdk-grid-align-content-md,var(--ttdk-grid-align-content-sm,var(--ttdk-grid-align-content,normal)))))}.ttdk-grid-item{grid-column:var(--ttdk-grid-item-col-xl,var(--ttdk-grid-item-col-lg,var(--ttdk-grid-item-col-md,var(--ttdk-grid-item-col-sm,var(--ttdk-grid-item-col,auto)))));grid-row:var(--ttdk-grid-item-row-xl,var(--ttdk-grid-item-row-lg,var(--ttdk-grid-item-row-md,var(--ttdk-grid-item-row-sm,var(--ttdk-grid-item-row,auto)))));justify-self:var(--ttdk-grid-item-justify-self-xl,var(--ttdk-grid-item-justify-self-lg,var(--ttdk-grid-item-justify-self-md,var(--ttdk-grid-item-justify-self-sm,var(--ttdk-grid-item-justify-self,auto)))));order:var(--ttdk-grid-item-order-xl,var(--ttdk-grid-item-order-lg,var(--ttdk-grid-item-order-md,var(--ttdk-grid-item-order-sm,var(--ttdk-grid-item-order,0)))))}}@media (width>=1536px){.ttdk-grid{grid-template-columns:var(--ttdk-grid-template-columns-2xl,var(--ttdk-grid-template-columns-xl,var(--ttdk-grid-template-columns-lg,var(--ttdk-grid-template-columns-md,var(--ttdk-grid-template-columns-sm,var(--ttdk-grid-template-columns,repeat(1, minmax(0, 1fr))))))));grid-template-rows:var(--ttdk-grid-template-rows-2xl,var(--ttdk-grid-template-rows-xl,var(--ttdk-grid-template-rows-lg,var(--ttdk-grid-template-rows-md,var(--ttdk-grid-template-rows-sm,var(--ttdk-grid-template-rows,auto))))));gap:var(--ttdk-grid-gap-2xl,var(--ttdk-grid-gap-xl,var(--ttdk-grid-gap-lg,var(--ttdk-grid-gap-md,var(--ttdk-grid-gap-sm,var(--ttdk-grid-gap,0))))));justify-content:var(--ttdk-grid-justify-content-2xl,var(--ttdk-grid-justify-content-xl,var(--ttdk-grid-justify-content-lg,var(--ttdk-grid-justify-content-md,var(--ttdk-grid-justify-content-sm,var(--ttdk-grid-justify-content,normal))))));align-content:var(--ttdk-grid-align-content-2xl,var(--ttdk-grid-align-content-xl,var(--ttdk-grid-align-content-lg,var(--ttdk-grid-align-content-md,var(--ttdk-grid-align-content-sm,var(--ttdk-grid-align-content,normal))))))}.ttdk-grid-item{grid-column:var(--ttdk-grid-item-col-2xl,var(--ttdk-grid-item-col-xl,var(--ttdk-grid-item-col-lg,var(--ttdk-grid-item-col-md,var(--ttdk-grid-item-col-sm,var(--ttdk-grid-item-col,auto))))));grid-row:var(--ttdk-grid-item-row-2xl,var(--ttdk-grid-item-row-xl,var(--ttdk-grid-item-row-lg,var(--ttdk-grid-item-row-md,var(--ttdk-grid-item-row-sm,var(--ttdk-grid-item-row,auto))))));justify-self:var(--ttdk-grid-item-justify-self-2xl,var(--ttdk-grid-item-justify-self-xl,var(--ttdk-grid-item-justify-self-lg,var(--ttdk-grid-item-justify-self-md,var(--ttdk-grid-item-justify-self-sm,var(--ttdk-grid-item-justify-self,auto))))));order:var(--ttdk-grid-item-order-2xl,var(--ttdk-grid-item-order-xl,var(--ttdk-grid-item-order-lg,var(--ttdk-grid-item-order-md,var(--ttdk-grid-item-order-sm,var(--ttdk-grid-item-order,0))))))}}
|