@crimson_/altarev 1.1.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/LICENSE +21 -0
- package/README.md +155 -0
- package/dist/index.cjs +3011 -0
- package/dist/index.d.cts +527 -0
- package/dist/index.d.ts +527 -0
- package/dist/index.js +2951 -0
- package/dist/styles.css +2 -0
- package/llms.txt +132 -0
- package/package.json +87 -0
package/dist/styles.css
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
/*! tailwindcss v4.3.1 | MIT License | https://tailwindcss.com */
|
|
2
|
+
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-scroll-snap-strictness:proximity;--tw-divide-x-reverse:0;--tw-border-style:solid;--tw-divide-y-reverse:0;--tw-leading:initial;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-duration:initial;--tw-ease:initial;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}@layer theme{:root,:host{--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-4xl:56rem;--container-7xl:80rem;--text-xs:12px;--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-8xl:72px;--font-weight-semibold:600;--font-weight-bold:700;--ease-in-out:cubic-bezier(.4, 0, .2, 1);--animate-spin:spin 1s linear infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-altarev-sans);--default-mono-font-family:var(--font-mono);--color-primary:var(--color-primary);--color-primary-tint:var(--color-primary-tint);--color-accent:var(--color-accent);--color-background:var(--color-background);--color-surface:var(--color-surface);--color-surface-raised:var(--color-surface-raised);--color-text:var(--color-text);--color-text-muted:var(--color-text-muted);--color-border:var(--color-border);--color-overlay:var(--color-overlay);--color-hover:var(--color-hover);--color-success:var(--color-success);--color-success-tint:var(--color-success-tint);--color-error:var(--color-error);--color-error-tint:var(--color-error-tint);--color-warning:var(--color-warning);--color-warning-tint:var(--color-warning-tint);--color-info:var(--color-info);--color-info-tint:var(--color-info-tint);--color-input-error:var(--color-input-error)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.inset-0{inset:0}.inset-x-0{inset-inline:0}.inset-y-0{inset-block:0}.top-0{top:0}.top-1\/2{top:50%}.top-4{top:calc(var(--spacing) * 4)}.top-\[-4px\]{top:-4px}.top-full{top:100%}.right-0{right:0}.right-3{right:calc(var(--spacing) * 3)}.right-4{right:calc(var(--spacing) * 4)}.right-\[-4px\]{right:-4px}.right-full{right:100%}.bottom-0{bottom:0}.bottom-4{bottom:calc(var(--spacing) * 4)}.bottom-\[-4px\]{bottom:-4px}.bottom-full{bottom:100%}.left-0{left:0}.left-0\.5{left:calc(var(--spacing) * .5)}.left-1\/2{left:50%}.left-3{left:calc(var(--spacing) * 3)}.left-4{left:calc(var(--spacing) * 4)}.left-10{left:calc(var(--spacing) * 10)}.left-\[-4px\]{left:-4px}.left-full{left:100%}.z-10{z-index:10}.z-50{z-index:50}.z-\[100\]{z-index:100}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.-m-px{margin:-1px}.m-0{margin:0}.m-auto{margin:auto}.mx-auto{margin-inline:auto}.my-auto{margin-block:auto}.mt-1{margin-top:var(--spacing)}.mt-2{margin-top:calc(var(--spacing) * 2)}.-mr-1{margin-right:calc(var(--spacing) * -1)}.-mr-2{margin-right:calc(var(--spacing) * -2)}.mr-2{margin-right:calc(var(--spacing) * 2)}.-mb-px{margin-bottom:-1px}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.ml-2{margin-left:calc(var(--spacing) * 2)}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.aspect-square{aspect-ratio:1}.size-1{width:var(--spacing);height:var(--spacing)}.size-2{width:calc(var(--spacing) * 2);height:calc(var(--spacing) * 2)}.size-3{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-5{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.size-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.size-7{width:calc(var(--spacing) * 7);height:calc(var(--spacing) * 7)}.size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.size-9{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9)}.size-10{width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10)}.size-12{width:calc(var(--spacing) * 12);height:calc(var(--spacing) * 12)}.size-14{width:calc(var(--spacing) * 14);height:calc(var(--spacing) * 14)}.size-16{width:calc(var(--spacing) * 16);height:calc(var(--spacing) * 16)}.size-20{width:calc(var(--spacing) * 20);height:calc(var(--spacing) * 20)}.size-full{width:100%;height:100%}.h-0\.5{height:calc(var(--spacing) * .5)}.h-1{height:var(--spacing)}.h-2{height:calc(var(--spacing) * 2)}.h-3{height:calc(var(--spacing) * 3)}.h-4{height:calc(var(--spacing) * 4)}.h-6{height:calc(var(--spacing) * 6)}.h-8{height:calc(var(--spacing) * 8)}.h-10{height:calc(var(--spacing) * 10)}.h-12{height:calc(var(--spacing) * 12)}.h-14{height:calc(var(--spacing) * 14)}.h-16{height:calc(var(--spacing) * 16)}.h-\[280px\]{height:280px}.h-auto{height:auto}.h-full{height:100%}.max-h-60{max-height:calc(var(--spacing) * 60)}.max-h-80{max-height:calc(var(--spacing) * 80)}.max-h-full{max-height:100%}.min-h-10{min-height:calc(var(--spacing) * 10)}.w-7{width:calc(var(--spacing) * 7)}.w-11{width:calc(var(--spacing) * 11)}.w-12{width:calc(var(--spacing) * 12)}.w-16{width:calc(var(--spacing) * 16)}.w-40{width:calc(var(--spacing) * 40)}.w-\[60px\]{width:60px}.w-\[280px\]{width:280px}.w-\[374px\]{width:374px}.w-\[448px\]{width:448px}.w-full{width:100%}.w-max{width:max-content}.w-px{width:1px}.max-w-4xl{max-width:var(--container-4xl)}.max-w-7xl{max-width:var(--container-7xl)}.max-w-container{max-width:1328px}.max-w-full{max-width:100%}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.max-w-xs{max-width:var(--container-xs)}.min-w-32{min-width:calc(var(--spacing) * 32)}.min-w-40{min-width:calc(var(--spacing) * 40)}.min-w-48{min-width:calc(var(--spacing) * 48)}.min-w-\[60px\]{min-width:60px}.min-w-full{min-width:100%}.flex-1{flex:1}.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.origin-left{transform-origin:0}.-translate-x-1\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.scale-0{--tw-scale-x:0%;--tw-scale-y:0%;--tw-scale-z:0%;scale:var(--tw-scale-x) var(--tw-scale-y)}.scale-100{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x) var(--tw-scale-y)}.-rotate-90{rotate:-90deg}.rotate-45{rotate:45deg}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-spin{animation:var(--animate-spin)}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize-none{resize:none}.snap-x{scroll-snap-type:x var(--tw-scroll-snap-strictness)}.snap-mandatory{--tw-scroll-snap-strictness:mandatory}.snap-start{scroll-snap-align:start}.\[scrollbar-width\:none\]{scrollbar-width:none}.list-none{list-style-type:none}.appearance-none{appearance:none}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-1{gap:var(--spacing)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-px{gap:1px}:where(.divide-x>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px * var(--tw-divide-x-reverse));border-inline-end-width:calc(1px * calc(1 - var(--tw-divide-x-reverse)))}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-border>:not(:last-child)){border-color:var(--color-border)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.scroll-smooth{scroll-behavior:smooth}.rounded-\[4px\]{border-radius:4px}.rounded-\[8px\]{border-radius:8px}.rounded-\[12px\]{border-radius:12px}.rounded-\[16px\]{border-radius:16px}.rounded-full{border-radius:3.40282e38px}.rounded-t-\[8px\]{border-top-left-radius:8px;border-top-right-radius:8px}.rounded-l-\[8px\]{border-top-left-radius:8px;border-bottom-left-radius:8px}.rounded-l-full{border-top-left-radius:3.40282e38px;border-bottom-left-radius:3.40282e38px}.rounded-r-\[8px\]{border-top-right-radius:8px;border-bottom-right-radius:8px}.rounded-r-full{border-top-right-radius:3.40282e38px;border-bottom-right-radius:3.40282e38px}.rounded-b-\[8px\]{border-bottom-right-radius:8px;border-bottom-left-radius:8px}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-4{border-style:var(--tw-border-style);border-width:4px}.border-\[1\.5px\]{border-style:var(--tw-border-style);border-width:1.5px}.border-\[2px\]{border-style:var(--tw-border-style);border-width:2px}.border-\[3px\]{border-style:var(--tw-border-style);border-width:3px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-\[var\(--color-input-error\)\]{border-color:var(--color-input-error)}.border-background{border-color:var(--color-background)}.border-border{border-color:var(--color-border)}.border-current{border-color:currentColor}.border-error{border-color:var(--color-error)}.border-info{border-color:var(--color-info)}.border-primary{border-color:var(--color-primary)}.border-success{border-color:var(--color-success)}.border-text-muted{border-color:var(--color-text-muted)}.border-transparent{border-color:#0000}.border-warning{border-color:var(--color-warning)}.border-t-transparent{border-top-color:#0000}.bg-background{background-color:var(--color-background)}.bg-border{background-color:var(--color-border)}.bg-error{background-color:var(--color-error)}.bg-error-tint{background-color:var(--color-error-tint)}.bg-hover{background-color:var(--color-hover)}.bg-info{background-color:var(--color-info)}.bg-info-tint{background-color:var(--color-info-tint)}.bg-primary{background-color:var(--color-primary)}.bg-primary-tint{background-color:var(--color-primary-tint)}.bg-success{background-color:var(--color-success)}.bg-success-tint{background-color:var(--color-success-tint)}.bg-surface{background-color:var(--color-surface)}.bg-text{background-color:var(--color-text)}.bg-transparent{background-color:#0000}.bg-warning{background-color:var(--color-warning)}.bg-warning-tint{background-color:var(--color-warning-tint)}.stroke-background{stroke:var(--color-background)}.stroke-primary{stroke:var(--color-primary)}.object-cover{object-fit:cover}.p-0{padding:0}.p-1{padding:var(--spacing)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-6{padding:calc(var(--spacing) * 6)}.px-1{padding-inline:var(--spacing)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-1{padding-block:var(--spacing)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-8{padding-block:calc(var(--spacing) * 8)}.pr-9{padding-right:calc(var(--spacing) * 9)}.pr-10{padding-right:calc(var(--spacing) * 10)}.pb-6{padding-bottom:calc(var(--spacing) * 6)}.pl-10{padding-left:calc(var(--spacing) * 10)}.text-center{text-align:center}.text-left{text-align:left}.text-2xl{font-size:24px;line-height:var(--tw-leading,32px)}.text-2xs{font-size:10px;line-height:var(--tw-leading,16px)}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:18px;line-height:var(--tw-leading,28px)}.text-md{font-size:16px;line-height:var(--tw-leading,24px)}.text-sm{font-size:14px;line-height:var(--tw-leading,24px)}.text-xl{font-size:20px;line-height:var(--tw-leading,32px)}.text-xs{font-size:12px;line-height:var(--tw-leading,16px)}.text-\[10px\]{font-size:10px}.leading-4{--tw-leading:calc(var(--spacing) * 4);line-height:calc(var(--spacing) * 4)}.leading-6{--tw-leading:calc(var(--spacing) * 6);line-height:calc(var(--spacing) * 6)}.leading-8{--tw-leading:calc(var(--spacing) * 8);line-height:calc(var(--spacing) * 8)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.whitespace-nowrap{white-space:nowrap}.text-\[var\(--color-input-error\)\]{color:var(--color-input-error)}.text-background,.text-background\/70{color:var(--color-background)}@supports (color:color-mix(in lab, red, red)){.text-background\/70{color:color-mix(in oklab, var(--color-background) 70%, transparent)}}.text-error{color:var(--color-error)}.text-info{color:var(--color-info)}.text-primary{color:var(--color-primary)}.text-success{color:var(--color-success)}.text-text{color:var(--color-text)}.text-text-muted{color:var(--color-text-muted)}.text-warning{color:var(--color-warning)}.text-white{color:var(--color-white)}.uppercase{text-transform:uppercase}.underline{text-decoration-line:underline}.opacity-0{opacity:0}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[0_0_1px_rgba\(0\,0\,0\,0\.4\)\,0_6px_6px_-6px_rgba\(0\,0\,0\,0\.16\)\]{--tw-shadow:0 0 1px var(--tw-shadow-color,#0006), 0 6px 6px -6px var(--tw-shadow-color,#00000029);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.transition-\[stroke-dashoffset\]{transition-property:stroke-dashoffset;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\]{transition-property:width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.\[--rdp-day-height\:40px\]{--rdp-day-height:40px}.\[--rdp-day-width\:40px\]{--rdp-day-width:40px}.group-focus-within\:opacity-100:is(:where(.group):focus-within *){opacity:1}@media (hover:hover){.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.peer-not-placeholder-shown\:top-0:is(:where(.peer):not(:placeholder-shown)~*){top:0}.peer-not-placeholder-shown\:left-3:is(:where(.peer):not(:placeholder-shown)~*){left:calc(var(--spacing) * 3)}.peer-not-placeholder-shown\:h-auto:is(:where(.peer):not(:placeholder-shown)~*){height:auto}.peer-not-placeholder-shown\:-translate-y-1\/2:is(:where(.peer):not(:placeholder-shown)~*){--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.peer-not-placeholder-shown\:text-xs:is(:where(.peer):not(:placeholder-shown)~*){font-size:12px;line-height:var(--tw-leading,16px)}.peer-checked\:block:is(:where(.peer):checked~*){display:block}.peer-checked\:translate-x-3:is(:where(.peer):checked~*){--tw-translate-x:calc(var(--spacing) * 3);translate:var(--tw-translate-x) var(--tw-translate-y)}.peer-checked\:translate-x-5:is(:where(.peer):checked~*){--tw-translate-x:calc(var(--spacing) * 5);translate:var(--tw-translate-x) var(--tw-translate-y)}.peer-checked\:translate-x-7:is(:where(.peer):checked~*){--tw-translate-x:calc(var(--spacing) * 7);translate:var(--tw-translate-x) var(--tw-translate-y)}.peer-checked\:scale-100:is(:where(.peer):checked~*){--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x) var(--tw-scale-y)}.peer-indeterminate\:block:is(:where(.peer):indeterminate~*){display:block}.peer-indeterminate\:hidden:is(:where(.peer):indeterminate~*){display:none}.peer-focus\:top-0:is(:where(.peer):focus~*){top:0}.peer-focus\:left-3:is(:where(.peer):focus~*){left:calc(var(--spacing) * 3)}.peer-focus\:h-auto:is(:where(.peer):focus~*){height:auto}.peer-focus\:-translate-y-1\/2:is(:where(.peer):focus~*){--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.peer-focus\:text-xs:is(:where(.peer):focus~*){font-size:12px;line-height:var(--tw-leading,16px)}.peer-focus\:text-\[var\(--color-input-error\)\]:is(:where(.peer):focus~*){color:var(--color-input-error)}.peer-focus\:text-primary:is(:where(.peer):focus~*){color:var(--color-primary)}.marker\:hidden ::marker{display:none}.marker\:hidden::marker{display:none}.marker\:hidden ::-webkit-details-marker{display:none}.marker\:hidden::-webkit-details-marker{display:none}.placeholder\:text-text-muted::placeholder{color:var(--color-text-muted)}.backdrop\:bg-overlay::backdrop{background-color:var(--color-overlay)}.even\:bg-background:nth-child(2n){background-color:var(--color-background)}.open\:flex:is([open],:popover-open,:open){display:flex}.checked\:border-primary:checked{border-color:var(--color-primary)}.checked\:bg-primary:checked{background-color:var(--color-primary)}.indeterminate\:border-primary:indeterminate{border-color:var(--color-primary)}.indeterminate\:bg-primary:indeterminate{background-color:var(--color-primary)}.focus-within\:z-10:focus-within{z-index:10}.focus-within\:border-\[1\.5px\]:focus-within{border-style:var(--tw-border-style);border-width:1.5px}.focus-within\:border-\[var\(--color-input-error\)\]:focus-within{border-color:var(--color-input-error)}.focus-within\:border-primary:focus-within{border-color:var(--color-primary)}.focus-within\:ring-4:focus-within{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-within\:ring-primary-tint:focus-within{--tw-ring-color:var(--color-primary-tint)}@media (hover:hover){.hover\:border-text-muted:hover{border-color:var(--color-text-muted)}.hover\:bg-error-tint:hover{background-color:var(--color-error-tint)}.hover\:bg-hover:hover{background-color:var(--color-hover)}.hover\:bg-info-tint:hover{background-color:var(--color-info-tint)}.hover\:bg-primary-tint:hover{background-color:var(--color-primary-tint)}.hover\:bg-success-tint:hover{background-color:var(--color-success-tint)}.hover\:bg-warning-tint:hover{background-color:var(--color-warning-tint)}.hover\:text-text:hover{color:var(--color-text)}.hover\:underline:hover{text-decoration-line:underline}.hover\:brightness-95:hover{--tw-brightness:brightness(95%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.hover\:brightness-100:hover{--tw-brightness:brightness(100%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}}.focus\:border-\[1\.5px\]:focus{border-style:var(--tw-border-style);border-width:1.5px}.focus\:border-\[var\(--color-input-error\)\]:focus{border-color:var(--color-input-error)}.focus\:border-primary:focus{border-color:var(--color-primary)}.focus\:ring-0:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus\:ring-primary-tint:focus{--tw-ring-color:var(--color-primary-tint)}.focus-visible\:bg-hover:focus-visible{background-color:var(--color-hover)}.focus-visible\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\:outline-primary:focus-visible{outline-color:var(--color-primary)}.focus-visible\:outline-text:focus-visible{outline-color:var(--color-text)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.active\:scale-95:active{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}.aria-selected\:font-semibold[aria-selected=true]{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}@media (min-width:40rem){.sm\:flex-row{flex-direction:row}}@media (min-width:48rem){.md\:px-6{padding-inline:calc(var(--spacing) * 6)}}@media (min-width:64rem){.lg\:px-8{padding-inline:calc(var(--spacing) * 8)}}.\[\&_button\]\:rounded-none button{border-radius:0}.\[\&_button\]\:bg-text button{background-color:var(--color-text)}.\[\&_button\]\:bg-transparent button{background-color:#0000}.\[\&_button\]\:text-background button{color:var(--color-background)}.\[\&_button\]\:text-text button{color:var(--color-text)}@media (hover:hover){.\[\&_button\]\:hover\:bg-primary-tint button:hover{background-color:var(--color-primary-tint)}.\[\&_button\]\:hover\:bg-text button:hover{background-color:var(--color-text)}}.\[\&_svg\]\:size-3 svg{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.\[\&_svg\]\:size-4 svg{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\[\&_svg\]\:size-5 svg{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.\[\&_svg\]\:size-6 svg{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.\[\&_svg\]\:size-20 svg{width:calc(var(--spacing) * 20);height:calc(var(--spacing) * 20)}.\[\&\:\:-webkit-scrollbar\]\:hidden::-webkit-scrollbar{display:none}.\[\&\:\:-webkit-search-cancel-button\]\:hidden::-webkit-search-cancel-button{display:none}.placeholder-shown\:\[\&\:\:placeholder\]\:opacity-0:placeholder-shown::placeholder{opacity:0}.\[\&\>a\]\:w-full>a{width:100%}.\[\&\>svg\]\:size-6>svg{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\[open\]\>summary\>svg\]\:rotate-180[open]>summary>svg{rotate:180deg}}@layer altarev.tokens{:root{--color-primary:#4e46b4;--color-primary-tint:#4e46b41f;--color-accent:#40a69f;--color-background:#f5f5f5;--color-surface:#fff;--color-surface-raised:#fff;--color-text:#000;--color-text-muted:#595d62;--color-border:#e2e2e2;--color-overlay:#0000008f;--color-hover:#0000000a;--color-success:#2e7d32;--color-success-tint:#2e7d321f;--color-error:#d33030;--color-error-tint:#d330301f;--color-warning:#ffb319;--color-warning-tint:#ffb3191f;--color-info:#3448f0;--color-info-tint:#3448f01f;--color-input-error:#ff4e64;--font-altarev-sans:"DM Sans", ui-sans-serif, system-ui, sans-serif}.dark{--color-primary:#4e46b4;--color-primary-tint:#4e46b452;--color-accent:#40a69f;--color-background:#0b0b0b;--color-surface:#1f1f1f;--color-surface-raised:#fff;--color-text:#fff;--color-text-muted:#595d62;--color-border:#444;--color-overlay:#0000008f;--color-hover:#ffffff14;--tw-shadow-color:#0009}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-scroll-snap-strictness{syntax:"*";inherits:false;initial-value:proximity}@property --tw-divide-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}
|
package/llms.txt
ADDED
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
# altarev
|
|
2
|
+
|
|
3
|
+
> A React 18+/19 + TypeScript + Tailwind CSS v4 component library. 37 accessible, themeable components built on native HTML elements. Themed entirely through CSS custom properties — consumers override token *values*, never class names.
|
|
4
|
+
|
|
5
|
+
This file tells an AI agent how to consume altarev without mistakes. Read the rules before writing code. Every rule exists because skipping it produces broken output.
|
|
6
|
+
|
|
7
|
+
## The two rules that break everything if missed
|
|
8
|
+
|
|
9
|
+
1. **Import the stylesheet exactly once, at your app root.** Without it, every component renders unstyled and the failure is silent (no error, just no styles).
|
|
10
|
+
```ts
|
|
11
|
+
import "altarev/styles.css";
|
|
12
|
+
```
|
|
13
|
+
2. **To theme, override token *values* in a plain `:root` block placed *after* the import. Never wrap overrides in `@layer`. Never edit class names.** A wrapped or mis-ordered override silently loses to the default.
|
|
14
|
+
|
|
15
|
+
If you only remember those two, the rest follows.
|
|
16
|
+
|
|
17
|
+
## Install
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
npm install altarev
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
- `react` and `react-dom` (>=18) are required peer deps. (React 19 is fine.)
|
|
24
|
+
- `react-day-picker` (^10) is an **optional** peer dep. Install it **only if** you use `Calendar`, `DateRangePicker`, or `TimePicker`. The other 34 components do not need it. If you use a date component without it installed, the import will fail.
|
|
25
|
+
- You do **not** need Tailwind installed in the consuming app. The stylesheet is self-contained (ships the full token layer as CSS variables).
|
|
26
|
+
|
|
27
|
+
## Import surface
|
|
28
|
+
|
|
29
|
+
Everything is a named export from the package root `"altarev"`. There are **no deep imports** (no `altarev/components/Button`). One CSS path only: `"altarev/styles.css"`.
|
|
30
|
+
|
|
31
|
+
```tsx
|
|
32
|
+
import { Button, TextInput, Tooltip } from "altarev";
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
All components are client components (`"use client"`). They can be imported directly into React Server Components / Next.js App Router pages without a wrapper.
|
|
36
|
+
|
|
37
|
+
## Theming — the full contract
|
|
38
|
+
|
|
39
|
+
Every color resolves through a CSS custom property at runtime. You change the **value**; altarev owns the **name** so all components stay consistent.
|
|
40
|
+
|
|
41
|
+
Correct (the only correct shape):
|
|
42
|
+
```css
|
|
43
|
+
@import "altarev/styles.css"; /* import FIRST */
|
|
44
|
+
|
|
45
|
+
:root {
|
|
46
|
+
--color-primary: #e11d48; /* your brand */
|
|
47
|
+
--color-surface: #fffaf5;
|
|
48
|
+
--color-text: #1a1208;
|
|
49
|
+
}
|
|
50
|
+
```
|
|
51
|
+
Why it works without `!important`: altarev's defaults live in `@layer altarev.tokens`. Per the CSS spec, any **un-layered** `:root` automatically beats a layered one. So a plain `:root` after the import always wins. This is the whole trick — do not fight it with specificity hacks.
|
|
52
|
+
|
|
53
|
+
Bundler variant (same idea, order is what matters):
|
|
54
|
+
```ts
|
|
55
|
+
import "altarev/styles.css";
|
|
56
|
+
import "./theme.css"; // your :root overrides, loaded after
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### Dark mode
|
|
60
|
+
Toggle a `.dark` class anywhere up the tree (usually `<html>`). Override the dark palette with a matching un-layered `.dark` block after the import:
|
|
61
|
+
```css
|
|
62
|
+
@import "altarev/styles.css";
|
|
63
|
+
:root { --color-primary: #e11d48; }
|
|
64
|
+
.dark { --color-primary: #fb7185; }
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### Tokens you may override (copy names exactly — a typo silently no-ops)
|
|
68
|
+
Colors accept any CSS color (`#hex`, `rgb()`, `hsl()`, `oklch()`):
|
|
69
|
+
`--color-primary`, `--color-primary-tint`, `--color-accent`, `--color-background`, `--color-surface`, `--color-surface-raised`, `--color-text`, `--color-text-muted`, `--color-border`, `--color-overlay`, `--color-hover`, `--color-success`, `--color-success-tint`, `--color-error`, `--color-error-tint`, `--color-warning`, `--color-warning-tint`, `--color-info`, `--color-info-tint`, `--color-input-error`.
|
|
70
|
+
|
|
71
|
+
Font family: `--font-altarev-sans` (e.g. `"Inter", system-ui, sans-serif`).
|
|
72
|
+
|
|
73
|
+
### Theming DON'Ts (each is a real failure mode)
|
|
74
|
+
- ❌ Don't wrap overrides in `@layer { ... }` — they re-enter competition with defaults and may lose.
|
|
75
|
+
- ❌ Don't put the override block *before* the import.
|
|
76
|
+
- ❌ Don't edit/remap Tailwind utility names (`bg-primary`, `text-primary`, …) or the `@theme` block. Change the value the name points to, not the name.
|
|
77
|
+
- ❌ Don't override the type **scale** (`--text-xs` … `--text-8xl`). It's intentionally fixed so spacing stays consistent. Override the font family only.
|
|
78
|
+
- ❌ Don't invent token names. `--color-primry` (typo) does nothing and the component keeps the default. Copy from the list above.
|
|
79
|
+
|
|
80
|
+
## Components (37) and their exports
|
|
81
|
+
|
|
82
|
+
Default usage: `import { X } from "altarev"`. Compound components below export their sub-parts as **separate named exports** from the root — you must import each part you use.
|
|
83
|
+
|
|
84
|
+
Simple (single export): `Accordion`, `Alert`, `Avatar`, `AuthCode`, `Button` (also `buttonVariants`), `Carousel`, `Checkbox`, `Chip`, `Container`, `Drawer`, `EmptyState`, `Loader`, `Modal`, `Popover`, `QuarterPicker`, `Radio`, `Search`, `Select`, `SegmentedControl`, `Switch`, `Tag`, `Textarea`, `TextInput`, `TimePicker`, `Tooltip`, `Calendar`.
|
|
85
|
+
|
|
86
|
+
Compound (import every part you use):
|
|
87
|
+
- **Tabs**: `Tabs`, `TabList`, `Tab`, `TabPanel`
|
|
88
|
+
- **Table**: `Table`, `TableHead`, `TableBody`, `TableRow`, `TableCell`, plus `DataTable` (a higher-level table driven by a `columns` prop) and the `selectionState` helper. Use `DataTable` for data-driven tables; use the primitives for hand-built markup.
|
|
89
|
+
- **Sidebar**: `Sidebar`, `SidebarSection`, `SidebarItem`
|
|
90
|
+
- **TextInputGroup**: `TextInputGroup`, `GroupField`
|
|
91
|
+
- **Dropdown**: `Dropdown`, `DropdownItem`
|
|
92
|
+
- **Snackbar/toasts**: wrap your app in `ToastProvider`, then call `useToast()` inside components to fire toasts. `Snackbar` is the visual; `ToastOptions`/`ToastPosition` type the API.
|
|
93
|
+
|
|
94
|
+
Helper exports you can use directly: `cn` (className merge: clsx + tailwind-merge), `paginationRange`, `clampPercent`, `filterOptions`, `presetRanges`, `defaultPresets`. `Combobox` ships `filterOptions`; `Pagination` ships `paginationRange`.
|
|
95
|
+
|
|
96
|
+
### How to get exact props
|
|
97
|
+
**Don't guess prop names.** Every component ships a `type XProps` export and full `.d.ts` types. Read `node_modules/altarev/dist/index.d.ts` (or hover types via the TS server) for the authoritative signature before writing props. Props are typed; rely on the types, not assumptions.
|
|
98
|
+
|
|
99
|
+
## Minimal correct example (end to end)
|
|
100
|
+
|
|
101
|
+
```tsx
|
|
102
|
+
// app root (e.g. layout / main entry) — import once
|
|
103
|
+
import "altarev/styles.css";
|
|
104
|
+
|
|
105
|
+
import { ToastProvider, Button, Tooltip, useToast } from "altarev";
|
|
106
|
+
|
|
107
|
+
function SaveButton() {
|
|
108
|
+
const { toast } = useToast(); // shape per ToastOptions in the .d.ts — verify before use
|
|
109
|
+
return (
|
|
110
|
+
<Tooltip content="Saves your changes">
|
|
111
|
+
<Button onClick={() => toast({ message: "Saved" })}>Save</Button>
|
|
112
|
+
</Tooltip>
|
|
113
|
+
);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
export function App() {
|
|
117
|
+
return (
|
|
118
|
+
<ToastProvider>
|
|
119
|
+
<SaveButton />
|
|
120
|
+
</ToastProvider>
|
|
121
|
+
);
|
|
122
|
+
}
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
## Pre-flight checklist before you ship altarev code
|
|
126
|
+
- [ ] `import "altarev/styles.css"` exists once at app root.
|
|
127
|
+
- [ ] Using a date component? `react-day-picker` is installed.
|
|
128
|
+
- [ ] Theme overrides are in an **un-layered** `:root`/`.dark`, placed **after** the import.
|
|
129
|
+
- [ ] No `@layer` around overrides; no edited class names; no renamed tokens.
|
|
130
|
+
- [ ] Compound components: every sub-part imported from `"altarev"`.
|
|
131
|
+
- [ ] Toasts: app wrapped in `ToastProvider`.
|
|
132
|
+
- [ ] Prop names verified against `dist/index.d.ts`, not guessed.
|
package/package.json
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@crimson_/altarev",
|
|
3
|
+
"version": "1.1.0",
|
|
4
|
+
"description": "A React + TypeScript + Tailwind CSS v4 component library",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.cjs",
|
|
7
|
+
"module": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"import": "./dist/index.js",
|
|
13
|
+
"require": "./dist/index.cjs"
|
|
14
|
+
},
|
|
15
|
+
"./styles.css": "./dist/styles.css"
|
|
16
|
+
},
|
|
17
|
+
"sideEffects": [
|
|
18
|
+
"**/*.css"
|
|
19
|
+
],
|
|
20
|
+
"files": [
|
|
21
|
+
"dist",
|
|
22
|
+
"llms.txt"
|
|
23
|
+
],
|
|
24
|
+
"scripts": {
|
|
25
|
+
"build": "tsup",
|
|
26
|
+
"dev": "tsup --watch",
|
|
27
|
+
"typecheck": "tsc --noEmit",
|
|
28
|
+
"lint": "eslint .",
|
|
29
|
+
"format": "prettier --write .",
|
|
30
|
+
"test": "vitest",
|
|
31
|
+
"prepare": "husky"
|
|
32
|
+
},
|
|
33
|
+
"peerDependencies": {
|
|
34
|
+
"react": ">=18",
|
|
35
|
+
"react-dom": ">=18",
|
|
36
|
+
"react-day-picker": "^10.0.0"
|
|
37
|
+
},
|
|
38
|
+
"peerDependenciesMeta": {
|
|
39
|
+
"react-day-picker": {
|
|
40
|
+
"optional": true
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
"dependencies": {
|
|
44
|
+
"class-variance-authority": "^0.7.1",
|
|
45
|
+
"clsx": "^2.1.1",
|
|
46
|
+
"tailwind-merge": "^3.0.0"
|
|
47
|
+
},
|
|
48
|
+
"devDependencies": {
|
|
49
|
+
"@eslint/js": "^10.0.1",
|
|
50
|
+
"@tailwindcss/cli": "^4.0.0",
|
|
51
|
+
"@types/react": "^19.0.0",
|
|
52
|
+
"@types/react-dom": "^19.0.0",
|
|
53
|
+
"eslint": "^10.5.0",
|
|
54
|
+
"eslint-config-prettier": "^10.1.8",
|
|
55
|
+
"eslint-plugin-no-comments": "^1.2.1",
|
|
56
|
+
"eslint-plugin-react-hooks": "^7.1.1",
|
|
57
|
+
"husky": "^9.1.7",
|
|
58
|
+
"lint-staged": "^16.4.0",
|
|
59
|
+
"prettier": "^3.8.4",
|
|
60
|
+
"react": "^19.0.0",
|
|
61
|
+
"react-day-picker": "^10.0.1",
|
|
62
|
+
"react-dom": "^19.0.0",
|
|
63
|
+
"tailwindcss": "^4.0.0",
|
|
64
|
+
"tsup": "^8.0.0",
|
|
65
|
+
"typescript": "^5.0.0",
|
|
66
|
+
"typescript-eslint": "^8.61.1",
|
|
67
|
+
"vitest": "^3.0.0"
|
|
68
|
+
},
|
|
69
|
+
"keywords": [
|
|
70
|
+
"react",
|
|
71
|
+
"components",
|
|
72
|
+
"ui",
|
|
73
|
+
"component-library",
|
|
74
|
+
"tailwindcss",
|
|
75
|
+
"tailwind",
|
|
76
|
+
"typescript",
|
|
77
|
+
"design-system"
|
|
78
|
+
],
|
|
79
|
+
"license": "MIT",
|
|
80
|
+
"lint-staged": {
|
|
81
|
+
"*.{ts,tsx,js,mjs}": [
|
|
82
|
+
"eslint --fix",
|
|
83
|
+
"prettier --write"
|
|
84
|
+
],
|
|
85
|
+
"*.{json,css,md}": "prettier --write"
|
|
86
|
+
}
|
|
87
|
+
}
|