@bookklik/senangstart-css 0.2.5 → 0.2.7
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/.agent/skills/add-utility/scripts/scaffold-utility.js +209 -0
- package/.agent/skills/compiler-development/SKILL.md +272 -0
- package/.agent/skills/jit-engine/SKILL.md +241 -0
- package/.agent/skills/jit-engine/examples/add-visual-utility.js +117 -0
- package/.agent/skills/jit-engine/examples/scale-based-utilities.js +130 -0
- package/.agent/skills/jit-engine/examples/state-responsive-handling.js +177 -0
- package/.agent/skills/senangstart-architecture/SKILL.md +163 -0
- package/.agent/skills/tailwind-conversion/SKILL.md +264 -0
- package/.agent/workflows/add-utility.md +155 -0
- package/.agent/workflows/build.md +97 -0
- package/.agent/workflows/dev.md +58 -0
- package/.agent/workflows/docs.md +113 -0
- package/.agent/workflows/test.md +103 -0
- package/dist/senangstart-css.js +99 -56
- package/dist/senangstart-css.min.js +36 -27
- package/dist/senangstart-tw.js +71 -2
- package/dist/senangstart-tw.min.js +1 -1
- package/docs/.vitepress/config.js +10 -2
- package/docs/guide/getting-started.md +6 -0
- package/docs/ms/guide/getting-started.md +6 -0
- package/docs/ms/reference/space/height.md +42 -7
- package/docs/ms/reference/space/width.md +40 -5
- package/docs/ms/reference/visual/divide-reverse.md +66 -0
- package/docs/ms/reference/visual/divide-style.md +80 -0
- package/docs/ms/reference/visual/divide-width.md +89 -0
- package/docs/ms/reference/visual/divide.md +115 -0
- package/docs/public/assets/senangstart-css.min.js +36 -27
- package/docs/public/llms.txt +40 -1
- package/docs/reference/space/height.md +42 -7
- package/docs/reference/space/width.md +40 -5
- package/docs/reference/visual/divide-reverse.md +66 -0
- package/docs/reference/visual/divide-style.md +80 -0
- package/docs/reference/visual/divide-width.md +89 -0
- package/docs/reference/visual/divide.md +115 -0
- package/docs/reference/visual.md +8 -2
- package/package.json +1 -1
- package/scripts/convert-tailwind.js +105 -2
- package/scripts/generate-llms-txt.js +2 -1
- package/src/cdn/senangstart-engine.js +128 -40
- package/src/cdn/tw-conversion-engine.js +92 -3
- package/src/compiler/generators/css.js +107 -3
- package/src/definitions/index.js +3 -0
- package/src/definitions/space.js +53 -17
- package/src/definitions/visual-divide.js +225 -0
- package/tests/unit/compiler/generators/css.test.js +75 -3
- package/tests/unit/convert-tailwind.test.js +71 -1
package/dist/senangstart-tw.js
CHANGED
|
@@ -320,13 +320,20 @@
|
|
|
320
320
|
};
|
|
321
321
|
}
|
|
322
322
|
const marginMatch = baseClass.match(
|
|
323
|
-
/^-?m([trblxy])?-(\d+\.?\d*|px|auto|full|screen)$/
|
|
323
|
+
/^-?m([trblxy])?-(\[.+\]|\d+\.?\d*|px|auto|full|screen)$/
|
|
324
324
|
);
|
|
325
325
|
if (marginMatch) {
|
|
326
326
|
const isNeg = baseClass.startsWith("-");
|
|
327
327
|
const side = marginMatch[1] ? "-" + marginMatch[1] : "";
|
|
328
328
|
let val = getSpacing(marginMatch[2], exact);
|
|
329
|
-
if (isNeg)
|
|
329
|
+
if (isNeg) {
|
|
330
|
+
if (val.startsWith("[") && val.endsWith("]")) {
|
|
331
|
+
const inner = val.slice(1, -1);
|
|
332
|
+
val = `[-${inner}]`;
|
|
333
|
+
} else {
|
|
334
|
+
val = `-${val}`;
|
|
335
|
+
}
|
|
336
|
+
}
|
|
330
337
|
return { cat: "space", val: prefix + "m" + side + ":" + val };
|
|
331
338
|
}
|
|
332
339
|
const gapMatch = baseClass.match(/^gap-([xy])?-?(.+)$/);
|
|
@@ -482,6 +489,68 @@
|
|
|
482
489
|
if (ringColorMatch) {
|
|
483
490
|
return { cat: "visual", val: prefix + "ring-color:" + ringColorMatch[1] };
|
|
484
491
|
}
|
|
492
|
+
const divideXMatch = baseClass.match(/^divide-x-((?:slate|gray|zinc|neutral|stone|red|orange|amber|yellow|lime|green|emerald|teal|cyan|sky|blue|indigo|violet|purple|fuchsia|pink|rose|white|black)(?:-\d+)?)$/);
|
|
493
|
+
if (divideXMatch) {
|
|
494
|
+
return {
|
|
495
|
+
cat: "visual",
|
|
496
|
+
val: prefix + "divide-x:" + divideXMatch[1]
|
|
497
|
+
};
|
|
498
|
+
}
|
|
499
|
+
const divideYMatch = baseClass.match(/^divide-y-((?:slate|gray|zinc|neutral|stone|red|orange|amber|yellow|lime|green|emerald|teal|cyan|sky|blue|indigo|violet|purple|fuchsia|pink|rose|white|black)(?:-\d+)?)$/);
|
|
500
|
+
if (divideYMatch) {
|
|
501
|
+
return {
|
|
502
|
+
cat: "visual",
|
|
503
|
+
val: prefix + "divide-y:" + divideYMatch[1]
|
|
504
|
+
};
|
|
505
|
+
}
|
|
506
|
+
const divideColorMatch = baseClass.match(/^divide-((?:slate|gray|zinc|neutral|stone|red|orange|amber|yellow|lime|green|emerald|teal|cyan|sky|blue|indigo|violet|purple|fuchsia|pink|rose|white|black)(?:-\d+)?)$/);
|
|
507
|
+
if (divideColorMatch) {
|
|
508
|
+
return {
|
|
509
|
+
cat: "visual",
|
|
510
|
+
val: prefix + "divide:" + divideColorMatch[1]
|
|
511
|
+
};
|
|
512
|
+
}
|
|
513
|
+
const divideWidthMatch = baseClass.match(/^divide-(\d+)$/);
|
|
514
|
+
if (divideWidthMatch) {
|
|
515
|
+
return {
|
|
516
|
+
cat: "visual",
|
|
517
|
+
val: prefix + "divide-w:" + getBorderWidth(divideWidthMatch[1], exact)
|
|
518
|
+
};
|
|
519
|
+
}
|
|
520
|
+
if (baseClass === "divide-x-reverse") {
|
|
521
|
+
return { cat: "visual", val: prefix + "divide-x:reverse" };
|
|
522
|
+
}
|
|
523
|
+
if (baseClass === "divide-y-reverse") {
|
|
524
|
+
return { cat: "visual", val: prefix + "divide-y:reverse" };
|
|
525
|
+
}
|
|
526
|
+
const divideXWidthMatch = baseClass.match(/^divide-x-(\d+)$/);
|
|
527
|
+
if (divideXWidthMatch) {
|
|
528
|
+
return {
|
|
529
|
+
cat: "visual",
|
|
530
|
+
val: prefix + "divide-x-w:" + getBorderWidth(divideXWidthMatch[1], exact)
|
|
531
|
+
};
|
|
532
|
+
}
|
|
533
|
+
if (baseClass === "divide-x") {
|
|
534
|
+
return { cat: "visual", val: prefix + "divide-x-w:thin" };
|
|
535
|
+
}
|
|
536
|
+
if (baseClass === "divide-y") {
|
|
537
|
+
return { cat: "visual", val: prefix + "divide-y-w:thin" };
|
|
538
|
+
}
|
|
539
|
+
const divideYWidthMatch = baseClass.match(/^divide-y-(\d+)$/);
|
|
540
|
+
if (divideYWidthMatch) {
|
|
541
|
+
return {
|
|
542
|
+
cat: "visual",
|
|
543
|
+
val: prefix + "divide-y-w:" + getBorderWidth(divideYWidthMatch[1], exact)
|
|
544
|
+
};
|
|
545
|
+
}
|
|
546
|
+
const divideStyleMatch = baseClass.match(/^divide-(solid|dashed|dotted|double|none)$/);
|
|
547
|
+
if (divideStyleMatch) {
|
|
548
|
+
return {
|
|
549
|
+
cat: "visual",
|
|
550
|
+
val: prefix + "divide-style:" + divideStyleMatch[1]
|
|
551
|
+
// Fixed category from 'color' to 'visual'
|
|
552
|
+
};
|
|
553
|
+
}
|
|
485
554
|
return null;
|
|
486
555
|
}
|
|
487
556
|
function convertClasses(classString, exact) {
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/* SenangStart TW v0.2.0 | MIT */
|
|
2
|
-
(()=>{var y={0:"none",px:"thin",.5:"regular",1:"tiny",1.5:"tiny-2x",2:"small",2.5:"small-2x",3:"small-3x",3.5:"small-4x",4:"medium",5:"medium-2x",6:"medium-3x",7:"medium-4x",8:"large",9:"large-2x",10:"large-3x",11:"large-4x",12:"big",14:"big-2x",16:"big-3x",20:"big-4x",24:"giant",28:"giant-2x",32:"giant-3x",36:"giant-4x",40:"vast",44:"vast-2x",48:"vast-3x",52:"vast-4x",56:"vast-5x",60:"vast-6x",64:"vast-7x",72:"vast-8x",80:"vast-9x",96:"vast-10x",full:"[100%]",screen:"[100vw]",auto:"auto"},K={none:"none",sm:"small","":"small",md:"small",lg:"medium",xl:"medium","2xl":"big","3xl":"big",full:"round"},N={none:"none",sm:"small","":"small",md:"medium",lg:"big",xl:"giant","2xl":"giant",inner:"none"},O={xs:"mini",sm:"small",base:"base",lg:"large",xl:"big","2xl":"huge","3xl":"grand","4xl":"giant","5xl":"mount","6xl":"mega","7xl":"giga","8xl":"tera","9xl":"hero"},$={container:"container",flex:"flex","inline-flex":"inline-flex",grid:"grid","inline-grid":"inline-grid",block:"block","inline-block":"inline",hidden:"hidden","flex-row":"row","flex-col":"col","flex-row-reverse":"row-reverse","flex-col-reverse":"col-reverse","flex-wrap":"wrap","flex-nowrap":"nowrap","flex-wrap-reverse":"wrap-reverse","flex-grow":"grow","flex-grow-0":"grow-0",grow:"grow","grow-0":"grow-0","flex-shrink":"shrink","flex-shrink-0":"shrink-0",shrink:"shrink","shrink-0":"shrink-0","flex-1":"flex:1","flex-auto":"flex:auto","flex-initial":"flex:initial","flex-none":"flex:none","justify-start":"justify:start","justify-end":"justify:end","justify-center":"justify:center","justify-between":"justify:between","justify-around":"justify:around","justify-evenly":"justify:evenly","items-start":"items:start","items-end":"items:end","items-center":"items:center","items-baseline":"items:baseline","items-stretch":"items:stretch","self-auto":"self:auto","self-start":"self:start","self-end":"self:end","self-center":"self:center","self-stretch":"self:stretch",relative:"relative",absolute:"absolute",fixed:"fixed",sticky:"sticky",static:"static","overflow-auto":"overflow:auto","overflow-hidden":"overflow:hidden","overflow-visible":"overflow:visible","overflow-scroll":"overflow:scroll","object-contain":"object:contain","object-cover":"object:cover","object-fill":"object:fill","object-none":"object:none","object-scale-down":"object:scale-down"},M={italic:"italic","not-italic":"not-italic",antialiased:"antialiased",uppercase:"uppercase",lowercase:"lowercase",capitalize:"capitalize","normal-case":"normal-case",underline:"underline","line-through":"line-through","no-underline":"no-underline",truncate:"truncate","cursor-pointer":"cursor:pointer","cursor-default":"cursor:default","cursor-not-allowed":"cursor:not-allowed","select-none":"select:none","select-text":"select:text","select-all":"select:all"};function m(l,i){return l.startsWith("[")&&l.endsWith("]")?l:i?["full","screen","auto"].includes(l)?y[l]||`[${l}]`:`tw-${l}`:y[l]||`[${l}]`}var J={0:"none",1:"thin",2:"regular",3:"thick",4:"tiny",8:"small"};function Q(l,i){return i?`tw-${l}`:J[l]||`[${l}px]`}function P(l,i){let f=l.match(/^(sm:|md:|lg:|xl:|2xl:|hover:|focus:|focus-visible:|active:|disabled:|dark:)(.+)$/),e="",t=l;if(f){let a=f[1].slice(0,-1);["sm","md","lg","xl","2xl"].includes(a)?e=`tw-${a}:`:e=f[1],t=f[2]}if($[t])return{cat:"layout",val:e+$[t]};if(M[t])return{cat:"visual",val:e+M[t]};let u=t.match(/^text-((?:slate|gray|zinc|neutral|stone|red|orange|amber|yellow|lime|green|emerald|teal|cyan|sky|blue|indigo|violet|purple|fuchsia|pink|rose|white|black)(?:-\d+)?)$/);if(u)return{cat:"visual",val:e+"text:"+u[1]};if(["text-left","text-center","text-right","text-justify"].includes(t))return{cat:"visual",val:e+"text:"+t.replace("text-","")};let s=t.match(/^text-(xs|sm|base|lg|xl|2xl|3xl|4xl|5xl|6xl|7xl|8xl|9xl)$/);if(s){let a=i?`tw-${s[1]}`:O[s[1]]||s[1];return{cat:"visual",val:e+"text-size:"+a}}let o=t.match(/^bg-((?:slate|gray|zinc|neutral|stone|red|orange|amber|yellow|lime|green|emerald|teal|cyan|sky|blue|indigo|violet|purple|fuchsia|pink|rose|white|black)(?:-\d+)?|transparent|current|inherit)$/);if(o){let a=o[1];return a==="transparent"?{cat:"visual",val:e+"bg:[transparent]"}:a==="current"?{cat:"visual",val:e+"bg:[currentColor]"}:a==="inherit"?{cat:"visual",val:e+"bg:[inherit]"}:{cat:"visual",val:e+"bg:"+a}}let r=t.match(/^border-((?:slate|gray|zinc|neutral|stone|red|orange|amber|yellow|lime|green|emerald|teal|cyan|sky|blue|indigo|violet|purple|fuchsia|pink|rose|white|black)(?:-\d+)?)$/);if(r)return{cat:"visual",val:e+"border:"+r[1]};let c=t.match(/^p([trblxy])?-(.+)$/);if(c){let a=c[1]?"-"+c[1]:"";return{cat:"space",val:e+"p"+a+":"+m(c[2],i)}}let g=t.match(/^-?m([trblxy])?-(\d+\.?\d*|px|auto|full|screen)$/);if(g){let a=t.startsWith("-"),n=g[1]?"-"+g[1]:"",h=m(g[2],i);return a&&(h="[-"+h+"]"),{cat:"space",val:e+"m"+n+":"+h}}let v=t.match(/^gap-([xy])?-?(.+)$/);if(v){let a=v[1]?"-"+v[1]:"";return{cat:"space",val:e+"g"+a+":"+m(v[2],i)}}let x=t.match(/^(min-w|max-w|w)-(.+)$/);if(x){let a=x[1],n=x[2],b={max:"[max-content]",min:"[min-content]",fit:"[fit-content]",prose:"[65ch]"}[n]||m(n,i);return{cat:"space",val:e+a+":"+b}}let p=t.match(/^(min-h|max-h|h)-(.+)$/);if(p){let a=p[1],n=p[2],b={screen:"[100vh]",svh:"[100svh]",lvh:"[100lvh]",dvh:"[100dvh]",max:"[max-content]",min:"[min-content]",fit:"[fit-content]"}[n]||m(n,i);return{cat:"space",val:e+a+":"+b}}let k=t.match(/^rounded(?:-(.+))?$/);if(k){let a=k[1]||"",n=i?a===""?"tw-DEFAULT":`tw-${a}`:K[a]||"medium";return{cat:"visual",val:e+"rounded:"+n}}let j=t.match(/^shadow(?:-(.+))?$/);if(j){let a=j[1]||"",n=i?a===""?"tw-DEFAULT":`tw-${a}`:N[a]||"medium";return{cat:"visual",val:e+"shadow:"+n}}let S=t.match(/^font-(thin|extralight|light|normal|medium|semibold|bold|extrabold|black)$/);if(S)return{cat:"visual",val:e+"font:tw-"+S[1]};let d=t.match(/^border(?:-([trblxy]))?(?:-(\d+))?$/);if(d&&(d[2]||!d[1]&&t==="border")){let a=d[1]?"-"+d[1]+"-w":"-w",n=d[2]||"1";return{cat:"visual",val:e+"border"+a+":"+Q(n,i)}}let w=t.match(/^(top|right|bottom|left|inset|inset-x|inset-y)-(\d+|px|auto|full|\[.+\])$/);if(w){let a=w[1],n=w[2];return n==="0"?n="none":n.startsWith("[")&&n.endsWith("]")||(n=m(n,i)),{cat:"layout",val:e+a+":"+n}}if(t==="outline-none")return{cat:"visual",val:e+"outline:none"};let z=t.match(/^order-(\d+|first|last|none)$/);if(z)return{cat:"layout",val:e+"order:"+z[1]};let W=t.match(/^grid-cols-(\d+|none)$/);if(W)return{cat:"layout",val:e+"grid-cols:"+W[1]};let V=t.match(/^col-span-(\d+|full)$/);if(V)return{cat:"layout",val:e+"col-span:"+V[1]};let C=t.match(/^grid-rows-(\d+|none)$/);if(C)return{cat:"layout",val:e+"grid-rows:"+C[1]};let T=t.match(/^row-span-(\d+|full)$/);if(T)return{cat:"layout",val:e+"row-span:"+T[1]};let H=t.match(/^opacity-(\d+)$/);if(H)return{cat:"visual",val:e+"opacity:"+H[1]};let L=t.match(/^bg-gradient-to-(t|tr|r|br|b|bl|l|tl)$/);if(L)return{cat:"visual",val:e+"bg-image:gradient-to-"+L[1]};let q=t.match(/^from-(.+)$/);if(q)return{cat:"visual",val:e+"from:"+q[1]};let A=t.match(/^via-(.+)$/);if(A)return{cat:"visual",val:e+"via:"+A[1]};let D=t.match(/^to-(.+)$/);if(D)return{cat:"visual",val:e+"to:"+D[1]};let E=t.match(/^transition(?:-(all|colors|opacity|shadow|transform|none))?$/);if(E){let a=E[1]||"all";return{cat:"visual",val:e+"transition:"+a}}let F=t.match(/^duration-(\d+)$/);if(F){let a=parseInt(F[1]),n;return a<=75?n="instant":a<=100?n="quick":a<=150?n="fast":a<=200?n="normal":a<=300?n="slow":a<=500?n="slower":n="lazy",{cat:"visual",val:e+"duration:"+n}}let U=t.match(/^ease-(linear|in|out|in-out)$/);if(U)return{cat:"visual",val:e+"ease:"+U[1]};let B=t.match(/^ring(?:-(\d+))?$/);if(B){let a=B[1]||"3";if(a==="0")return{cat:"visual",val:e+"ring:none"};let h={1:"thin",2:"regular",3:"small",4:"medium",8:"big"}[a]||`[${a}px]`;return{cat:"visual",val:e+"ring:"+h}}let G=t.match(/^ring-offset-(\d+)$/);if(G)return{cat:"visual",val:e+"ring-offset:"+G[1]};let I=t.match(/^ring-((?:slate|gray|zinc|neutral|stone|red|orange|amber|yellow|lime|green|emerald|teal|cyan|sky|blue|indigo|violet|purple|fuchsia|pink|rose|white|black)(?:-\d+)?)$/);return I?{cat:"visual",val:e+"ring-color:"+I[1]}:null}function R(l,i){let f=l.trim().split(/\s+/).filter(o=>o),e=[],t=[],u=[],s=[];for(let o of f){let r=P(o,i);r?r.cat==="layout"?e.push(r.val):r.cat==="space"?t.push(r.val):r.cat==="visual"&&u.push(r.val):s.push(o)}return{layout:e,space:t,visual:u,unknown:s}}function X(l,i){return l.replace(/class=(['"])([^"']+)\1/g,(f,e,t)=>{let{layout:u,space:s,visual:o,unknown:r}=R(t,i),c=[];return u.length&&c.push(`layout="${u.join(" ")}"`),s.length&&c.push(`space="${s.join(" ")}"`),o.length&&c.push(`visual="${o.join(" ")}"`),r.length&&c.push(`class="${r.join(" ")}"`),c.join(" ")||'class=""'})}typeof window<"u"&&(window.SenangStartTW={convertClass:P,convertClasses:R,convertHTML:X,scales:{spacing:y,radius:K,shadow:N,fontSize:O},mappings:{layout:$,visual:M}});})();
|
|
2
|
+
(()=>{var $={0:"none",px:"thin",.5:"regular",1:"tiny",1.5:"tiny-2x",2:"small",2.5:"small-2x",3:"small-3x",3.5:"small-4x",4:"medium",5:"medium-2x",6:"medium-3x",7:"medium-4x",8:"large",9:"large-2x",10:"large-3x",11:"large-4x",12:"big",14:"big-2x",16:"big-3x",20:"big-4x",24:"giant",28:"giant-2x",32:"giant-3x",36:"giant-4x",40:"vast",44:"vast-2x",48:"vast-3x",52:"vast-4x",56:"vast-5x",60:"vast-6x",64:"vast-7x",72:"vast-8x",80:"vast-9x",96:"vast-10x",full:"[100%]",screen:"[100vw]",auto:"auto"},Q={none:"none",sm:"small","":"small",md:"small",lg:"medium",xl:"medium","2xl":"big","3xl":"big",full:"round"},Z={none:"none",sm:"small","":"small",md:"medium",lg:"big",xl:"giant","2xl":"giant",inner:"none"},_={xs:"mini",sm:"small",base:"base",lg:"large",xl:"big","2xl":"huge","3xl":"grand","4xl":"giant","5xl":"mount","6xl":"mega","7xl":"giga","8xl":"tera","9xl":"hero"},k={container:"container",flex:"flex","inline-flex":"inline-flex",grid:"grid","inline-grid":"inline-grid",block:"block","inline-block":"inline",hidden:"hidden","flex-row":"row","flex-col":"col","flex-row-reverse":"row-reverse","flex-col-reverse":"col-reverse","flex-wrap":"wrap","flex-nowrap":"nowrap","flex-wrap-reverse":"wrap-reverse","flex-grow":"grow","flex-grow-0":"grow-0",grow:"grow","grow-0":"grow-0","flex-shrink":"shrink","flex-shrink-0":"shrink-0",shrink:"shrink","shrink-0":"shrink-0","flex-1":"flex:1","flex-auto":"flex:auto","flex-initial":"flex:initial","flex-none":"flex:none","justify-start":"justify:start","justify-end":"justify:end","justify-center":"justify:center","justify-between":"justify:between","justify-around":"justify:around","justify-evenly":"justify:evenly","items-start":"items:start","items-end":"items:end","items-center":"items:center","items-baseline":"items:baseline","items-stretch":"items:stretch","self-auto":"self:auto","self-start":"self:start","self-end":"self:end","self-center":"self:center","self-stretch":"self:stretch",relative:"relative",absolute:"absolute",fixed:"fixed",sticky:"sticky",static:"static","overflow-auto":"overflow:auto","overflow-hidden":"overflow:hidden","overflow-visible":"overflow:visible","overflow-scroll":"overflow:scroll","object-contain":"object:contain","object-cover":"object:cover","object-fill":"object:fill","object-none":"object:none","object-scale-down":"object:scale-down"},M={italic:"italic","not-italic":"not-italic",antialiased:"antialiased",uppercase:"uppercase",lowercase:"lowercase",capitalize:"capitalize","normal-case":"normal-case",underline:"underline","line-through":"line-through","no-underline":"no-underline",truncate:"truncate","cursor-pointer":"cursor:pointer","cursor-default":"cursor:default","cursor-not-allowed":"cursor:not-allowed","select-none":"select:none","select-text":"select:text","select-all":"select:all"};function v(l,n){return l.startsWith("[")&&l.endsWith("]")?l:n?["full","screen","auto"].includes(l)?$[l]||`[${l}]`:`tw-${l}`:$[l]||`[${l}]`}var at={0:"none",1:"thin",2:"regular",3:"thick",4:"tiny",8:"small"};function p(l,n){return n?`tw-${l}`:at[l]||`[${l}px]`}function tt(l,n){let f=l.match(/^(sm:|md:|lg:|xl:|2xl:|hover:|focus:|focus-visible:|active:|disabled:|dark:)(.+)$/),e="",t=l;if(f){let a=f[1].slice(0,-1);["sm","md","lg","xl","2xl"].includes(a)?e=`tw-${a}:`:e=f[1],t=f[2]}if(k[t])return{cat:"layout",val:e+k[t]};if(M[t])return{cat:"visual",val:e+M[t]};let d=t.match(/^text-((?:slate|gray|zinc|neutral|stone|red|orange|amber|yellow|lime|green|emerald|teal|cyan|sky|blue|indigo|violet|purple|fuchsia|pink|rose|white|black)(?:-\d+)?)$/);if(d)return{cat:"visual",val:e+"text:"+d[1]};if(["text-left","text-center","text-right","text-justify"].includes(t))return{cat:"visual",val:e+"text:"+t.replace("text-","")};let o=t.match(/^text-(xs|sm|base|lg|xl|2xl|3xl|4xl|5xl|6xl|7xl|8xl|9xl)$/);if(o){let a=n?`tw-${o[1]}`:_[o[1]]||o[1];return{cat:"visual",val:e+"text-size:"+a}}let c=t.match(/^bg-((?:slate|gray|zinc|neutral|stone|red|orange|amber|yellow|lime|green|emerald|teal|cyan|sky|blue|indigo|violet|purple|fuchsia|pink|rose|white|black)(?:-\d+)?|transparent|current|inherit)$/);if(c){let a=c[1];return a==="transparent"?{cat:"visual",val:e+"bg:[transparent]"}:a==="current"?{cat:"visual",val:e+"bg:[currentColor]"}:a==="inherit"?{cat:"visual",val:e+"bg:[inherit]"}:{cat:"visual",val:e+"bg:"+a}}let r=t.match(/^border-((?:slate|gray|zinc|neutral|stone|red|orange|amber|yellow|lime|green|emerald|teal|cyan|sky|blue|indigo|violet|purple|fuchsia|pink|rose|white|black)(?:-\d+)?)$/);if(r)return{cat:"visual",val:e+"border:"+r[1]};let u=t.match(/^p([trblxy])?-(.+)$/);if(u){let a=u[1]?"-"+u[1]:"";return{cat:"space",val:e+"p"+a+":"+v(u[2],n)}}let m=t.match(/^-?m([trblxy])?-(\[.+\]|\d+\.?\d*|px|auto|full|screen)$/);if(m){let a=t.startsWith("-"),i=m[1]?"-"+m[1]:"",s=v(m[2],n);return a&&(s.startsWith("[")&&s.endsWith("]")?s=`[-${s.slice(1,-1)}]`:s=`-${s}`),{cat:"space",val:e+"m"+i+":"+s}}let g=t.match(/^gap-([xy])?-?(.+)$/);if(g){let a=g[1]?"-"+g[1]:"";return{cat:"space",val:e+"g"+a+":"+v(g[2],n)}}let w=t.match(/^(min-w|max-w|w)-(.+)$/);if(w){let a=w[1],i=w[2],x={max:"[max-content]",min:"[min-content]",fit:"[fit-content]",prose:"[65ch]"}[i]||v(i,n);return{cat:"space",val:e+a+":"+x}}let b=t.match(/^(min-h|max-h|h)-(.+)$/);if(b){let a=b[1],i=b[2],x={screen:"[100vh]",svh:"[100svh]",lvh:"[100lvh]",dvh:"[100dvh]",max:"[max-content]",min:"[min-content]",fit:"[fit-content]"}[i]||v(i,n);return{cat:"space",val:e+a+":"+x}}let j=t.match(/^rounded(?:-(.+))?$/);if(j){let a=j[1]||"",i=n?a===""?"tw-DEFAULT":`tw-${a}`:Q[a]||"medium";return{cat:"visual",val:e+"rounded:"+i}}let z=t.match(/^shadow(?:-(.+))?$/);if(z){let a=z[1]||"",i=n?a===""?"tw-DEFAULT":`tw-${a}`:Z[a]||"medium";return{cat:"visual",val:e+"shadow:"+i}}let W=t.match(/^font-(thin|extralight|light|normal|medium|semibold|bold|extrabold|black)$/);if(W)return{cat:"visual",val:e+"font:tw-"+W[1]};let h=t.match(/^border(?:-([trblxy]))?(?:-(\d+))?$/);if(h&&(h[2]||!h[1]&&t==="border")){let a=h[1]?"-"+h[1]+"-w":"-w",i=h[2]||"1";return{cat:"visual",val:e+"border"+a+":"+p(i,n)}}let y=t.match(/^(top|right|bottom|left|inset|inset-x|inset-y)-(\d+|px|auto|full|\[.+\])$/);if(y){let a=y[1],i=y[2];return i==="0"?i="none":i.startsWith("[")&&i.endsWith("]")||(i=v(i,n)),{cat:"layout",val:e+a+":"+i}}if(t==="outline-none")return{cat:"visual",val:e+"outline:none"};let S=t.match(/^order-(\d+|first|last|none)$/);if(S)return{cat:"layout",val:e+"order:"+S[1]};let C=t.match(/^grid-cols-(\d+|none)$/);if(C)return{cat:"layout",val:e+"grid-cols:"+C[1]};let V=t.match(/^col-span-(\d+|full)$/);if(V)return{cat:"layout",val:e+"col-span:"+V[1]};let T=t.match(/^grid-rows-(\d+|none)$/);if(T)return{cat:"layout",val:e+"grid-rows:"+T[1]};let H=t.match(/^row-span-(\d+|full)$/);if(H)return{cat:"layout",val:e+"row-span:"+H[1]};let L=t.match(/^opacity-(\d+)$/);if(L)return{cat:"visual",val:e+"opacity:"+L[1]};let q=t.match(/^bg-gradient-to-(t|tr|r|br|b|bl|l|tl)$/);if(q)return{cat:"visual",val:e+"bg-image:gradient-to-"+q[1]};let A=t.match(/^from-(.+)$/);if(A)return{cat:"visual",val:e+"from:"+A[1]};let D=t.match(/^via-(.+)$/);if(D)return{cat:"visual",val:e+"via:"+D[1]};let E=t.match(/^to-(.+)$/);if(E)return{cat:"visual",val:e+"to:"+E[1]};let F=t.match(/^transition(?:-(all|colors|opacity|shadow|transform|none))?$/);if(F){let a=F[1]||"all";return{cat:"visual",val:e+"transition:"+a}}let U=t.match(/^duration-(\d+)$/);if(U){let a=parseInt(U[1]),i;return a<=75?i="instant":a<=100?i="quick":a<=150?i="fast":a<=200?i="normal":a<=300?i="slow":a<=500?i="slower":i="lazy",{cat:"visual",val:e+"duration:"+i}}let X=t.match(/^ease-(linear|in|out|in-out)$/);if(X)return{cat:"visual",val:e+"ease:"+X[1]};let Y=t.match(/^ring(?:-(\d+))?$/);if(Y){let a=Y[1]||"3";if(a==="0")return{cat:"visual",val:e+"ring:none"};let s={1:"thin",2:"regular",3:"small",4:"medium",8:"big"}[a]||`[${a}px]`;return{cat:"visual",val:e+"ring:"+s}}let B=t.match(/^ring-offset-(\d+)$/);if(B)return{cat:"visual",val:e+"ring-offset:"+B[1]};let G=t.match(/^ring-((?:slate|gray|zinc|neutral|stone|red|orange|amber|yellow|lime|green|emerald|teal|cyan|sky|blue|indigo|violet|purple|fuchsia|pink|rose|white|black)(?:-\d+)?)$/);if(G)return{cat:"visual",val:e+"ring-color:"+G[1]};let I=t.match(/^divide-x-((?:slate|gray|zinc|neutral|stone|red|orange|amber|yellow|lime|green|emerald|teal|cyan|sky|blue|indigo|violet|purple|fuchsia|pink|rose|white|black)(?:-\d+)?)$/);if(I)return{cat:"visual",val:e+"divide-x:"+I[1]};let K=t.match(/^divide-y-((?:slate|gray|zinc|neutral|stone|red|orange|amber|yellow|lime|green|emerald|teal|cyan|sky|blue|indigo|violet|purple|fuchsia|pink|rose|white|black)(?:-\d+)?)$/);if(K)return{cat:"visual",val:e+"divide-y:"+K[1]};let N=t.match(/^divide-((?:slate|gray|zinc|neutral|stone|red|orange|amber|yellow|lime|green|emerald|teal|cyan|sky|blue|indigo|violet|purple|fuchsia|pink|rose|white|black)(?:-\d+)?)$/);if(N)return{cat:"visual",val:e+"divide:"+N[1]};let O=t.match(/^divide-(\d+)$/);if(O)return{cat:"visual",val:e+"divide-w:"+p(O[1],n)};if(t==="divide-x-reverse")return{cat:"visual",val:e+"divide-x:reverse"};if(t==="divide-y-reverse")return{cat:"visual",val:e+"divide-y:reverse"};let P=t.match(/^divide-x-(\d+)$/);if(P)return{cat:"visual",val:e+"divide-x-w:"+p(P[1],n)};if(t==="divide-x")return{cat:"visual",val:e+"divide-x-w:thin"};if(t==="divide-y")return{cat:"visual",val:e+"divide-y-w:thin"};let R=t.match(/^divide-y-(\d+)$/);if(R)return{cat:"visual",val:e+"divide-y-w:"+p(R[1],n)};let J=t.match(/^divide-(solid|dashed|dotted|double|none)$/);return J?{cat:"visual",val:e+"divide-style:"+J[1]}:null}function et(l,n){let f=l.trim().split(/\s+/).filter(c=>c),e=[],t=[],d=[],o=[];for(let c of f){let r=tt(c,n);r?r.cat==="layout"?e.push(r.val):r.cat==="space"?t.push(r.val):r.cat==="visual"&&d.push(r.val):o.push(c)}return{layout:e,space:t,visual:d,unknown:o}}function it(l,n){return l.replace(/class=(['"])([^"']+)\1/g,(f,e,t)=>{let{layout:d,space:o,visual:c,unknown:r}=et(t,n),u=[];return d.length&&u.push(`layout="${d.join(" ")}"`),o.length&&u.push(`space="${o.join(" ")}"`),c.length&&u.push(`visual="${c.join(" ")}"`),r.length&&u.push(`class="${r.join(" ")}"`),u.join(" ")||'class=""'})}typeof window<"u"&&(window.SenangStartTW={convertClass:tt,convertClasses:et,convertHTML:it,scales:{spacing:$,radius:Q,shadow:Z,fontSize:_},mappings:{layout:k,visual:M}});})();
|
|
@@ -222,7 +222,11 @@ const enSidebar = {
|
|
|
222
222
|
{ text: 'Border Color', link: '/reference/visual/border' },
|
|
223
223
|
{ text: 'Border Width', link: '/reference/visual/border-width' },
|
|
224
224
|
{ text: 'Border Radius', link: '/reference/visual/border-radius' },
|
|
225
|
-
{ text: 'Border Style', link: '/reference/visual/border-style' }
|
|
225
|
+
{ text: 'Border Style', link: '/reference/visual/border-style' },
|
|
226
|
+
{ text: 'Divide Color', link: '/reference/visual/divide' },
|
|
227
|
+
{ text: 'Divide Width', link: '/reference/visual/divide-width' },
|
|
228
|
+
{ text: 'Divide Style', link: '/reference/visual/divide-style' },
|
|
229
|
+
{ text: 'Divide Reverse', link: '/reference/visual/divide-reverse' }
|
|
226
230
|
]
|
|
227
231
|
},
|
|
228
232
|
{
|
|
@@ -590,7 +594,11 @@ const msSidebar = {
|
|
|
590
594
|
{ text: 'Warna Sempadan', link: '/ms/reference/visual/border' },
|
|
591
595
|
{ text: 'Lebar Sempadan', link: '/ms/reference/visual/border-width' },
|
|
592
596
|
{ text: 'Radius Sempadan', link: '/ms/reference/visual/border-radius' },
|
|
593
|
-
{ text: 'Gaya Sempadan', link: '/ms/reference/visual/border-style' }
|
|
597
|
+
{ text: 'Gaya Sempadan', link: '/ms/reference/visual/border-style' },
|
|
598
|
+
{ text: 'Warna Pemisah', link: '/ms/reference/visual/divide-color' },
|
|
599
|
+
{ text: 'Lebar Pemisah', link: '/ms/reference/visual/divide-width' },
|
|
600
|
+
{ text: 'Gaya Pemisah', link: '/ms/reference/visual/divide-style' },
|
|
601
|
+
{ text: 'Pemisah Terbalik', link: '/ms/reference/visual/divide-reverse' }
|
|
594
602
|
]
|
|
595
603
|
},
|
|
596
604
|
{
|
|
@@ -123,6 +123,12 @@ Let's create a simple card:
|
|
|
123
123
|
- `space="w:[320px] p:medium"` — 320px width, medium padding
|
|
124
124
|
- `visual="bg:white rounded:big shadow:medium"` — White background, rounded corners, shadow
|
|
125
125
|
|
|
126
|
+
## For AI Assistants
|
|
127
|
+
|
|
128
|
+
If you are using AI coding assistants (like Cursor, Windsurf, or others), you can provide them with our specialized context file. This file contains the full list of available references and usage instructions in a format optimized for LLMs.
|
|
129
|
+
|
|
130
|
+
File location: [`https://bookklik-technologies.github.io/senangstart-css/llms.txt`](https://bookklik-technologies.github.io/senangstart-css/llms.txt)
|
|
131
|
+
|
|
126
132
|
## Next Steps
|
|
127
133
|
|
|
128
134
|
- [Tri-Attribute Syntax](/guide/tri-attribute) — Deep dive into layout, space, visual
|
|
@@ -123,6 +123,12 @@ Mari cipta kad ringkas:
|
|
|
123
123
|
- `space="w:[320px] p:medium"` — Lebar 320px, padding medium
|
|
124
124
|
- `visual="bg:white rounded:big shadow:medium"` — Latar putih, sudut bulat, bayang
|
|
125
125
|
|
|
126
|
+
## Untuk Pembantu AI
|
|
127
|
+
|
|
128
|
+
Jika anda menggunakan pembantu pengekodan AI (seperti Cursor, Windsurf, atau lain-lain), anda boleh membekalkan fail konteks khusus kami kepada mereka. Fail ini mengandungi senarai penuh rujukan yang tersedia dan arahan penggunaan dalam format yang disokong untuk LLMs.
|
|
129
|
+
|
|
130
|
+
Lokasi fail: [`https://bookklik-technologies.github.io/senangstart-css/llms.txt`](https://bookklik-technologies.github.io/senangstart-css/llms.txt)
|
|
131
|
+
|
|
126
132
|
## Langkah Seterusnya
|
|
127
133
|
|
|
128
134
|
- [Sintaksis Tri-Atribusi](/ms/guide/tri-attribute) — Selami layout, space, visual
|
|
@@ -17,13 +17,16 @@ space="h:[value]"
|
|
|
17
17
|
|
|
18
18
|
## Nilai Skala
|
|
19
19
|
|
|
20
|
-
`none`, `thin`, `regular`, `thick`, `tiny`, `tiny-2x`, `small`, `small-2x`, `small-3x`, `small-4x`, `medium`, `medium-2x`, `medium-3x`, `medium-4x`, `large`, `large-2x`, `large-3x`, `large-4x`, `big`, `big-2x`, `big-3x`, `big-4x`, `giant`, `giant-2x`, `giant-3x`, `giant-4x`, `vast`, `vast-2x`, `vast-3x`, `vast-4x`, `vast-5x`, `vast-6x`, `vast-7x`, `vast-8x`, `vast-9x`, `vast-10x`
|
|
20
|
+
`none`, `thin`, `regular`, `thick`, `tiny`, `tiny-2x`, `small`, `small-2x`, `small-3x`, `small-4x`, `medium`, `medium-2x`, `medium-3x`, `medium-4x`, `large`, `large-2x`, `large-3x`, `large-4x`, `big`, `big-2x`, `big-3x`, `big-4x`, `giant`, `giant-2x`, `giant-3x`, `giant-4x`, `vast`, `vast-2x`, `vast-3x`, `vast-4x`, `vast-5x`, `vast-6x`, `vast-7x`, `vast-8x`, `vast-9x`, `vast-10x`, `min`, `max`, `fit`
|
|
21
21
|
|
|
22
22
|
## Contoh
|
|
23
23
|
|
|
24
24
|
```html
|
|
25
25
|
<div space="h:[100vh]">Full viewport height</div>
|
|
26
26
|
<div space="min-h:[400px]">Min height</div>
|
|
27
|
+
<div space="h:max">Content height</div>
|
|
28
|
+
<div space="max-h:max">Max content height</div>
|
|
29
|
+
<div space="min-h:min">Min content height</div>
|
|
27
30
|
```
|
|
28
31
|
|
|
29
32
|
## Pratonton
|
|
@@ -58,12 +61,14 @@ space="h:[value]"
|
|
|
58
61
|
|
|
59
62
|
<div space="p-x:big p-b:medium m-t:medium" visual="border-w:thin border:neutral-100 dark:border:neutral-800 rounded:medium">
|
|
60
63
|
|
|
61
|
-
### Tinggi
|
|
64
|
+
### Tinggi Berdasarkan Kandungan
|
|
62
65
|
|
|
63
66
|
<div layout="flex col" space="g:medium">
|
|
64
|
-
<p space="m:none" visual="text:neutral-600 dark:text:neutral-400 text-sm"><code>space="
|
|
65
|
-
<div space="p:medium" visual="bg:neutral-100 dark:bg:neutral-900 rounded:medium">
|
|
66
|
-
<div space="
|
|
67
|
+
<p space="m:none" visual="text:neutral-600 dark:text:neutral-400 text-sm"><code>space="h:max"</code> - Guna min, max, atau fit untuk tinggi berdasarkan kandungan</p>
|
|
68
|
+
<div layout="flex" space="g:small p:medium" visual="bg:neutral-100 dark:bg:neutral-900 rounded:medium">
|
|
69
|
+
<div space="h:min p:small" visual="bg:primary text:white rounded:small">h:min</div>
|
|
70
|
+
<div space="h:max p:small" visual="bg:pink-600 text:white rounded:small">h:max<br>Multi<br>Line</div>
|
|
71
|
+
<div space="h:fit p:small" visual="bg:amber-600 text:white rounded:small">h:fit</div>
|
|
67
72
|
</div>
|
|
68
73
|
</div>
|
|
69
74
|
|
|
@@ -71,8 +76,38 @@ space="h:[value]"
|
|
|
71
76
|
<summary>Lihat Kod</summary>
|
|
72
77
|
|
|
73
78
|
```html
|
|
74
|
-
<div space="p:medium" visual="bg:neutral-100 dark:bg:neutral-900 rounded:medium">
|
|
75
|
-
<div space="
|
|
79
|
+
<div layout="flex" space="g:small p:medium" visual="bg:neutral-100 dark:bg:neutral-900 rounded:medium">
|
|
80
|
+
<div space="h:min p:small" visual="bg:primary text:white rounded:small">h:min</div>
|
|
81
|
+
<div space="h:max p:small" visual="bg:pink-600 text:white rounded:small">h:max<br>Multi<br>Line</div>
|
|
82
|
+
<div space="h:fit p:small" visual="bg:amber-600 text:white rounded:small">h:fit</div>
|
|
83
|
+
</div>
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
</details>
|
|
87
|
+
|
|
88
|
+
</div>
|
|
89
|
+
|
|
90
|
+
<div space="p-x:big p-b:medium m-t:medium" visual="border-w:thin border:neutral-100 dark:border:neutral-800 rounded:medium">
|
|
91
|
+
|
|
92
|
+
### Tinggi Min/Max dengan Nilai Kandungan
|
|
93
|
+
|
|
94
|
+
<div layout="flex col" space="g:medium">
|
|
95
|
+
<p space="m:none" visual="text:neutral-600 dark:text:neutral-400 text-sm"><code>space="min-h:min"</code> - Hadkan tinggi menggunakan nilai kandungan</p>
|
|
96
|
+
<div layout="flex" space="g:small p:medium" visual="bg:neutral-100 dark:bg:neutral-900 rounded:medium">
|
|
97
|
+
<div space="min-h:min p:small" visual="bg:primary text:white rounded:small">min-h:min</div>
|
|
98
|
+
<div space="max-h:max p:small" visual="bg:pink-600 text:white rounded:small">max-h:max</div>
|
|
99
|
+
<div space="min-h:[80px] p:small" visual="bg:amber-600 text:white rounded:small" layout="flex center">min-h:[80px]</div>
|
|
100
|
+
</div>
|
|
101
|
+
</div>
|
|
102
|
+
|
|
103
|
+
<details>
|
|
104
|
+
<summary>Lihat Kod</summary>
|
|
105
|
+
|
|
106
|
+
```html
|
|
107
|
+
<div layout="flex" space="g:small p:medium" visual="bg:neutral-100 dark:bg:neutral-900 rounded:medium">
|
|
108
|
+
<div space="min-h:min p:small" visual="bg:primary text:white rounded:small">min-h:min</div>
|
|
109
|
+
<div space="max-h:max p:small" visual="bg:pink-600 text:white rounded:small">max-h:max</div>
|
|
110
|
+
<div space="min-h:[80px] p:small" visual="bg:amber-600 text:white rounded:small" layout="flex center">min-h:[80px]</div>
|
|
76
111
|
</div>
|
|
77
112
|
```
|
|
78
113
|
|
|
@@ -17,7 +17,7 @@ space="w:[value]"
|
|
|
17
17
|
|
|
18
18
|
## Nilai Skala
|
|
19
19
|
|
|
20
|
-
`none`, `thin`, `regular`, `thick`, `tiny`, `tiny-2x`, `small`, `small-2x`, `small-3x`, `small-4x`, `medium`, `medium-2x`, `medium-3x`, `medium-4x`, `large`, `large-2x`, `large-3x`, `large-4x`, `big`, `big-2x`, `big-3x`, `big-4x`, `giant`, `giant-2x`, `giant-3x`, `giant-4x`, `vast`, `vast-2x`, `vast-3x`, `vast-4x`, `vast-5x`, `vast-6x`, `vast-7x`, `vast-8x`, `vast-9x`, `vast-10x`
|
|
20
|
+
`none`, `thin`, `regular`, `thick`, `tiny`, `tiny-2x`, `small`, `small-2x`, `small-3x`, `small-4x`, `medium`, `medium-2x`, `medium-3x`, `medium-4x`, `large`, `large-2x`, `large-3x`, `large-4x`, `big`, `big-2x`, `big-3x`, `big-4x`, `giant`, `giant-2x`, `giant-3x`, `giant-4x`, `vast`, `vast-2x`, `vast-3x`, `vast-4x`, `vast-5x`, `vast-6x`, `vast-7x`, `vast-8x`, `vast-9x`, `vast-10x`, `min`, `max`, `fit`
|
|
21
21
|
|
|
22
22
|
## Contoh
|
|
23
23
|
|
|
@@ -25,6 +25,9 @@ space="w:[value]"
|
|
|
25
25
|
<div space="w:[100%]">Full width</div>
|
|
26
26
|
<div space="max-w:[1200px]">Max width container</div>
|
|
27
27
|
<div space="min-w:[300px]">Min width</div>
|
|
28
|
+
<div space="w:max">Content width</div>
|
|
29
|
+
<div space="max-w:max">Max content width</div>
|
|
30
|
+
<div space="min-w:min">Min content width</div>
|
|
28
31
|
```
|
|
29
32
|
|
|
30
33
|
## Pratonton
|
|
@@ -59,12 +62,14 @@ space="w:[value]"
|
|
|
59
62
|
|
|
60
63
|
<div space="p-x:big p-b:medium m-t:medium" visual="border-w:thin border:neutral-100 dark:border:neutral-800 rounded:medium">
|
|
61
64
|
|
|
62
|
-
###
|
|
65
|
+
### Saiz Berdasarkan Kandungan
|
|
63
66
|
|
|
64
67
|
<div layout="flex col" space="g:medium">
|
|
65
|
-
<p space="m:none" visual="text:neutral-600 dark:text:neutral-400 text-sm"><code>space="
|
|
68
|
+
<p space="m:none" visual="text:neutral-600 dark:text:neutral-400 text-sm"><code>space="w:max"</code> - Guna min, max, atau fit untuk saiz berdasarkan kandungan</p>
|
|
66
69
|
<div space="p:medium" visual="bg:neutral-100 dark:bg:neutral-900 rounded:medium">
|
|
67
|
-
<div space="
|
|
70
|
+
<div space="w:min p:small m-b:small" visual="bg:primary text:white rounded:small">w:min shrinks to minimum</div>
|
|
71
|
+
<div space="w:max p:small m-b:small" visual="bg:pink-600 text:white rounded:small">w:max expands to fit all content without wrapping</div>
|
|
72
|
+
<div space="w:fit p:small" visual="bg:green-600 text:white rounded:small">w:fit adapts to available space while respecting content</div>
|
|
68
73
|
</div>
|
|
69
74
|
</div>
|
|
70
75
|
|
|
@@ -73,7 +78,37 @@ space="w:[value]"
|
|
|
73
78
|
|
|
74
79
|
```html
|
|
75
80
|
<div space="p:medium" visual="bg:neutral-100 dark:bg:neutral-900 rounded:medium">
|
|
76
|
-
<div space="
|
|
81
|
+
<div space="w:min p:small m-b:small" visual="bg:primary text:white rounded:small">w:min shrinks to minimum</div>
|
|
82
|
+
<div space="w:max p:small m-b:small" visual="bg:pink-600 text:white rounded:small">w:max expands to fit all content without wrapping</div>
|
|
83
|
+
<div space="w:fit p:small" visual="bg:green-600 text:white rounded:small">w:fit adapts to available space while respecting content</div>
|
|
84
|
+
</div>
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
</details>
|
|
88
|
+
|
|
89
|
+
</div>
|
|
90
|
+
|
|
91
|
+
<div space="p-x:big p-b:medium m-t:medium" visual="border-w:thin border:neutral-100 dark:border:neutral-800 rounded:medium">
|
|
92
|
+
|
|
93
|
+
### Lebar Maksimum dengan Nilai Kandungan
|
|
94
|
+
|
|
95
|
+
<div layout="flex col" space="g:medium">
|
|
96
|
+
<p space="m:none" visual="text:neutral-600 dark:text:neutral-400 text-sm"><code>space="max-w:min"</code> - Hadkan lebar maksimum menggunakan nilai kandungan</p>
|
|
97
|
+
<div space="p:medium" visual="bg:neutral-100 dark:bg:neutral-900 rounded:medium">
|
|
98
|
+
<div space="max-w:min p:small m-b:small" visual="bg:primary text:white rounded:small">max-w:min - Text will wrap to minimum width needed</div>
|
|
99
|
+
<div space="max-w:max p:small m-b:small" visual="bg:pink-600 text:white rounded:small">max-w:max - Expands to content</div>
|
|
100
|
+
<div space="max-w:[200px] p:small" visual="bg:green-600 text:white rounded:small">max-w:[200px] - Fixed max</div>
|
|
101
|
+
</div>
|
|
102
|
+
</div>
|
|
103
|
+
|
|
104
|
+
<details>
|
|
105
|
+
<summary>Lihat Kod</summary>
|
|
106
|
+
|
|
107
|
+
```html
|
|
108
|
+
<div space="p:medium" visual="bg:neutral-100 dark:bg:neutral-900 rounded:medium">
|
|
109
|
+
<div space="max-w:min p:small m-b:small" visual="bg:primary text:white rounded:small">max-w:min - Text will wrap to minimum width needed</div>
|
|
110
|
+
<div space="max-w:max p:small m-b:small" visual="bg:pink-600 text:white rounded:small">max-w:max - Expands to content</div>
|
|
111
|
+
<div space="max-w:[200px] p:small" visual="bg:green-600 text:white rounded:small">max-w:[200px] - Fixed max</div>
|
|
77
112
|
</div>
|
|
78
113
|
```
|
|
79
114
|
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# Divide Reverse
|
|
2
|
+
|
|
3
|
+
Songsangkan sisi sempadan untuk flex-reverse
|
|
4
|
+
|
|
5
|
+
## Sintaks
|
|
6
|
+
```
|
|
7
|
+
visual="divide-{x|y}:reverse"
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
## Nilai
|
|
11
|
+
|
|
12
|
+
| Nilai | CSS Output | Huraian |
|
|
13
|
+
|-------|------------|-------------|
|
|
14
|
+
| `divide-x:reverse` | `--ss-divide-x-reverse: 1` | Songsangkan pemisah paksi-X |
|
|
15
|
+
| `divide-y:reverse` | `--ss-divide-y-reverse: 1` | Songsangkan pemisah paksi-Y |
|
|
16
|
+
|
|
17
|
+
## Contoh
|
|
18
|
+
|
|
19
|
+
```html
|
|
20
|
+
<div layout="flex flex-row-reverse" visual="divide-x:gray-300 divide-x-w:thin divide-x:reverse">
|
|
21
|
+
<div layout="flex flex-col-reverse" visual="divide-y:gray-300 divide-y-w:thin divide-y:reverse">
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Pratonton
|
|
25
|
+
|
|
26
|
+
<div space="p-x:big p-b:medium m-t:medium" visual="border-w:thin border:neutral-100 dark:border:neutral-800 rounded:medium">
|
|
27
|
+
|
|
28
|
+
### Songsang vs Biasa
|
|
29
|
+
|
|
30
|
+
<div layout="flex col" space="g:medium">
|
|
31
|
+
<p space="m:none" visual="text:neutral-600 dark:text:neutral-400 text-sm"><code>visual="divide-x:reverse"</code> - Perbandingan pemisah aliran biasa vs songsang</p>
|
|
32
|
+
<div layout="flex col" space="g:medium p:medium" visual="bg:neutral-100 dark:bg:neutral-900 rounded:medium">
|
|
33
|
+
<div layout="flex" space="p:medium" visual="bg:white dark:bg:neutral-800 rounded:small divide:neutral-500 divide-x-w:regular">
|
|
34
|
+
<div space="p:small">1</div>
|
|
35
|
+
<div space="p:small">2</div>
|
|
36
|
+
<div space="p:small">3</div>
|
|
37
|
+
</div>
|
|
38
|
+
<div layout="flex row-reverse" space="p:medium" visual="bg:white dark:bg:neutral-800 rounded:small divide:neutral-500 divide-x-w:regular divide-x:reverse">
|
|
39
|
+
<div space="p:small">1(R)</div>
|
|
40
|
+
<div space="p:small">2(R)</div>
|
|
41
|
+
<div space="p:small">3(R)</div>
|
|
42
|
+
</div>
|
|
43
|
+
</div>
|
|
44
|
+
</div>
|
|
45
|
+
|
|
46
|
+
<details>
|
|
47
|
+
<summary>Lihat Kod</summary>
|
|
48
|
+
|
|
49
|
+
```html
|
|
50
|
+
<div layout="flex col" space="g:medium p:medium" visual="bg:neutral-100 dark:bg:neutral-900 rounded:medium">
|
|
51
|
+
<div layout="flex" space="p:medium" visual="bg:white dark:bg:neutral-800 rounded:small divide:neutral-500 divide-x-w:regular">
|
|
52
|
+
<div space="p:small">1</div>
|
|
53
|
+
<div space="p:small">2</div>
|
|
54
|
+
<div space="p:small">3</div>
|
|
55
|
+
</div>
|
|
56
|
+
<div layout="flex row-reverse" space="p:medium" visual="bg:white dark:bg:neutral-800 rounded:small divide:neutral-500 divide-x-w:regular divide-x:reverse">
|
|
57
|
+
<div space="p:small">1(R)</div>
|
|
58
|
+
<div space="p:small">2(R)</div>
|
|
59
|
+
<div space="p:small">3(R)</div>
|
|
60
|
+
</div>
|
|
61
|
+
</div>
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
</details>
|
|
65
|
+
|
|
66
|
+
</div>
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# Divide Style
|
|
2
|
+
|
|
3
|
+
Tetapkan gaya pemisah
|
|
4
|
+
|
|
5
|
+
## Sintaks
|
|
6
|
+
```
|
|
7
|
+
visual="divide-style:[value]"
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
## Nilai
|
|
11
|
+
|
|
12
|
+
| Nilai | CSS Output | Huraian |
|
|
13
|
+
|-------|------------|-------------|
|
|
14
|
+
| `solid` | `border-style: solid` | Pemisah pepejal |
|
|
15
|
+
| `dashed` | `border-style: dashed` | Pemisah putus-putus |
|
|
16
|
+
| `dotted` | `border-style: dotted` | Pemisah bertitik |
|
|
17
|
+
| `double` | `border-style: double` | Pemisah berganda |
|
|
18
|
+
| `none` | `border-style: none` | Tiada pemisah |
|
|
19
|
+
|
|
20
|
+
## Contoh
|
|
21
|
+
|
|
22
|
+
```html
|
|
23
|
+
<div visual="divide:gray-300 divide-style:dashed">
|
|
24
|
+
<div visual="divide:gray-300 divide-style:dotted">
|
|
25
|
+
<div visual="divide:gray-300 divide-style:double">
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Pratonton
|
|
29
|
+
|
|
30
|
+
<div space="p-x:big p-b:medium m-t:medium" visual="border-w:thin border:neutral-100 dark:border:neutral-800 rounded:medium">
|
|
31
|
+
|
|
32
|
+
### Gaya Pemisah
|
|
33
|
+
|
|
34
|
+
<div layout="flex col" space="g:medium">
|
|
35
|
+
<p space="m:none" visual="text:neutral-600 dark:text:neutral-400 text-sm"><code>visual="divide-style:dashed"</code> - Pilihan gaya pemisah berbeza</p>
|
|
36
|
+
<div layout="flex col" space="p:medium g:medium" visual="bg:neutral-100 dark:bg:neutral-900 rounded:medium">
|
|
37
|
+
<div layout="flex" visual="bg:white dark:bg:neutral-800 rounded:small divide:neutral-500 divide-x-w:regular divide-style:solid border:neutral-500 border-w:regular border-style:solid">
|
|
38
|
+
<div space="p:medium">solid</div>
|
|
39
|
+
<div space="p:medium">solid</div>
|
|
40
|
+
<div space="p:medium">solid</div>
|
|
41
|
+
</div>
|
|
42
|
+
<div layout="flex" visual="bg:white dark:bg:neutral-800 rounded:small divide:neutral-500 divide-x-w:regular divide-style:dashed border:neutral-500 border-w:regular border-style:dashed">
|
|
43
|
+
<div space="p:medium">dashed</div>
|
|
44
|
+
<div space="p:medium">dashed</div>
|
|
45
|
+
<div space="p:medium">dashed</div>
|
|
46
|
+
</div>
|
|
47
|
+
<div layout="flex" visual="bg:white dark:bg:neutral-800 rounded:small divide:neutral-500 divide-x-w:regular divide-style:dotted border:neutral-500 border-w:regular border-style:dotted">
|
|
48
|
+
<div space="p:medium">dotted</div>
|
|
49
|
+
<div space="p:medium">dotted</div>
|
|
50
|
+
<div space="p:medium">dotted</div>
|
|
51
|
+
</div>
|
|
52
|
+
</div>
|
|
53
|
+
</div>
|
|
54
|
+
|
|
55
|
+
<details>
|
|
56
|
+
<summary>Lihat Kod</summary>
|
|
57
|
+
|
|
58
|
+
```html
|
|
59
|
+
<div layout="flex col" space="p:medium g:medium" visual="bg:neutral-100 dark:bg:neutral-900 rounded:medium">
|
|
60
|
+
<div layout="flex" visual="bg:white dark:bg:neutral-800 rounded:small divide:neutral-500 divide-x-w:regular divide-style:solid border:neutral-500 border-w:regular border-style:solid">
|
|
61
|
+
<div space="p:medium">solid</div>
|
|
62
|
+
<div space="p:medium">solid</div>
|
|
63
|
+
<div space="p:medium">solid</div>
|
|
64
|
+
</div>
|
|
65
|
+
<div layout="flex" visual="bg:white dark:bg:neutral-800 rounded:small divide:neutral-500 divide-x-w:regular divide-style:dashed border:neutral-500 border-w:regular border-style:dashed">
|
|
66
|
+
<div space="p:medium">dashed</div>
|
|
67
|
+
<div space="p:medium">dashed</div>
|
|
68
|
+
<div space="p:medium">dashed</div>
|
|
69
|
+
</div>
|
|
70
|
+
<div layout="flex" visual="bg:white dark:bg:neutral-800 rounded:small divide:neutral-500 divide-x-w:regular divide-style:dotted border:neutral-500 border-w:regular border-style:dotted">
|
|
71
|
+
<div space="p:medium">dotted</div>
|
|
72
|
+
<div space="p:medium">dotted</div>
|
|
73
|
+
<div space="p:medium">dotted</div>
|
|
74
|
+
</div>
|
|
75
|
+
</div>
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
</details>
|
|
79
|
+
|
|
80
|
+
</div>
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# Divide Width
|
|
2
|
+
|
|
3
|
+
Tetapkan lebar pemisah
|
|
4
|
+
|
|
5
|
+
## Sintaks
|
|
6
|
+
```
|
|
7
|
+
visual="divide-w:[value]" | visual="divide-{x|y}-w:[value]"
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
## Nilai
|
|
11
|
+
|
|
12
|
+
| Nilai | CSS Output | Huraian |
|
|
13
|
+
|-------|------------|-------------|
|
|
14
|
+
| `none` | `border-width: var(--s-none)` | Tiada pemisah (0px) |
|
|
15
|
+
| `thin` | `border-width: var(--s-thin)` | Pemisah nipis (1px) |
|
|
16
|
+
| `regular` | `border-width: var(--s-regular)` | Pemisah standard (2px) |
|
|
17
|
+
| `thick` | `border-width: var(--s-thick)` | Pemisah tebal (3px) |
|
|
18
|
+
|
|
19
|
+
## Contoh
|
|
20
|
+
|
|
21
|
+
```html
|
|
22
|
+
<div visual="divide:gray-300 divide-w:thin">
|
|
23
|
+
<div visual="divide:gray-300 divide-w:regular">
|
|
24
|
+
<div visual="divide:gray-300 divide-w:thick">
|
|
25
|
+
<div visual="divide-y:primary divide-y-w:regular">
|
|
26
|
+
<div visual="divide-x:primary divide-x-w:thin">
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Pratonton
|
|
30
|
+
|
|
31
|
+
<div space="p-x:big p-b:medium m-t:medium" visual="border-w:thin border:neutral-100 dark:border:neutral-800 rounded:medium">
|
|
32
|
+
|
|
33
|
+
### Lebar Pemisah
|
|
34
|
+
|
|
35
|
+
<div layout="flex col" space="g:medium">
|
|
36
|
+
<p space="m:none" visual="text:neutral-600 dark:text:neutral-400 text-sm"><code>visual="divide-w:regular"</code> - Pilihan lebar pemisah berbeza</p>
|
|
37
|
+
<div layout="flex col" space="p:medium g:medium" visual="bg:neutral-100 dark:bg:neutral-900 rounded:medium">
|
|
38
|
+
<div layout="flex" visual="bg:white dark:bg:neutral-800 rounded:small divide:neutral-500 divide-x-w:thin">
|
|
39
|
+
<div space="p:medium">thin (1px)</div>
|
|
40
|
+
<div space="p:medium">thin (1px)</div>
|
|
41
|
+
<div space="p:medium">thin (1px)</div>
|
|
42
|
+
</div>
|
|
43
|
+
<div layout="flex" visual="bg:white dark:bg:neutral-800 rounded:small divide:neutral-500 divide-x-w:regular">
|
|
44
|
+
<div space="p:medium">regular (2px)</div>
|
|
45
|
+
<div space="p:medium">regular (2px)</div>
|
|
46
|
+
<div space="p:medium">regular (2px)</div>
|
|
47
|
+
</div>
|
|
48
|
+
<div layout="flex" visual="bg:white dark:bg:neutral-800 rounded:small divide:neutral-500 divide-x-w:thick">
|
|
49
|
+
<div space="p:medium">thick (3px)</div>
|
|
50
|
+
<div space="p:medium">thick (3px)</div>
|
|
51
|
+
<div space="p:medium">thick (3px)</div>
|
|
52
|
+
</div>
|
|
53
|
+
</div>
|
|
54
|
+
</div>
|
|
55
|
+
|
|
56
|
+
<details>
|
|
57
|
+
<summary>Lihat Kod</summary>
|
|
58
|
+
|
|
59
|
+
```html
|
|
60
|
+
<div layout="flex col" space="p:medium g:medium" visual="bg:neutral-100 dark:bg:neutral-900 rounded:medium">
|
|
61
|
+
<div layout="flex" visual="bg:white dark:bg:neutral-800 rounded:small divide:neutral-500 divide-x-w:thin">
|
|
62
|
+
<div space="p:medium">thin (1px)</div>
|
|
63
|
+
<div space="p:medium">thin (1px)</div>
|
|
64
|
+
<div space="p:medium">thin (1px)</div>
|
|
65
|
+
</div>
|
|
66
|
+
<div layout="flex" visual="bg:white dark:bg:neutral-800 rounded:small divide:neutral-500 divide-x-w:regular">
|
|
67
|
+
<div space="p:medium">regular (2px)</div>
|
|
68
|
+
<div space="p:medium">regular (2px)</div>
|
|
69
|
+
<div space="p:medium">regular (2px)</div>
|
|
70
|
+
</div>
|
|
71
|
+
<div layout="flex" visual="bg:white dark:bg:neutral-800 rounded:small divide:neutral-500 divide-x-w:thick">
|
|
72
|
+
<div space="p:medium">thick (3px)</div>
|
|
73
|
+
<div space="p:medium">thick (3px)</div>
|
|
74
|
+
<div space="p:medium">thick (3px)</div>
|
|
75
|
+
</div>
|
|
76
|
+
</div>
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
</details>
|
|
80
|
+
|
|
81
|
+
</div>
|
|
82
|
+
|
|
83
|
+
## Nilai Arbitrari
|
|
84
|
+
|
|
85
|
+
Sokong nilai tersuai menggunakan sintaks kurungan segi empat:
|
|
86
|
+
|
|
87
|
+
```html
|
|
88
|
+
<div visual="divide:[custom-value]">Custom</div>
|
|
89
|
+
```
|