Status Decorator
Add label, and show error, success and info messages for components (dynamic components)
Child Components
Usage
Import
ts
import { Asd } from "@agufaui/${framework name}";
Html
<asd /> or <Asd />
Configuration
Theme component name: asd
Showcase
vis component name, eg.v="button"stands forAbutton,v="input"stands forAinput. Just any AgufaUI component name without first characterA- component interface definition must extends
IPropsinterfaceIASdProps<T extends IProps> - because of fall through attributes, properties of
Asdis renamed to includes charactersasd, sovbecomesvasd, to differ from dynamic component'svproperty
*
Can't contain special characters
Must be at least 8 characters
*
http://
*
kg
*
Can't contain special characters
Must be at least 8 characters
Success
Submitted
*
Can't contain special characters
Must be at least 8 characters
Click to see code
vue
<template>
<div class="flex flex-col gap-y-4">
<asd
:labelasd="label"
vasd="input"
t="grid4"
dirasd="input"
:propsasd="props"
:alertasd="alert"
:alerterrorasd="alertError"
@update:v="notify($event)"
/>
<asd
:labelasd="labelPre"
:prependasd="badgePre"
vasd="input"
t="grid4"
dirasd="input"
:propsasd="propsPre"
/>
<asd
:labelasd="labelPost"
:postpendasd="badgePost"
vasd="select"
t="grid4"
dirasd="select"
:propsasd="select"
@select="assign(select.v, $event)"
/>
<asd
:labelasd="labelUp"
uplabelasd
vasd="input"
t="grid4"
dirasd="input"
:propsasd="props"
:alertasd="alert"
:alerterrorasd="alertError"
@update:v="notify($event)"
/>
<asd vasd="button" dirasd="button" :propsasd="propsButton" :alerterrorasd="alertErrorSuccess" />
<asd vasd="button" dirasd="button" :propsasd="propsSlot" :alerterrorasd="alertErrorSuccess">
<template #msg>
<span>Submitted</span>
</template>
</asd>
<b>Responsive</b>
<asd
:labelasd="labelRes"
vasd="input"
t="resgrid4"
dirasd="input"
:propsasd="props"
:alertasd="alert"
:alerterrorasd="alertError"
@update:v="notify($event)"
/>
</div>
</template>
<script lang="ts">
export default {
name: "DocSd",
};
</script>
<script setup lang="ts">
import type {
IAInputProps,
IAButtonProps,
IALabelProps,
IAAlertProps,
IAAlertErrorProps,
IABadgeProps,
IASelectProps,
TSelectOption,
} from "@agufaui/theme";
let label: IALabelProps = {
v: "Username",
c: "pr-2",
required: true,
right: true,
tooltip: { v: "user name" },
};
let props: IAInputProps = {
v: "",
vc: "w-full",
};
let alert: IAAlertProps = {
v: "Can't contain special characters",
show: true,
};
let alertError: IAAlertErrorProps = {
v: "Must be at least 8 characters",
show: true,
error: true,
};
let labelPre: IALabelProps = {
v: "Url",
c: "pr-2",
required: true,
right: true,
tooltip: { v: "url" },
};
let propsPre: IAInputProps = {
v: "",
vc: "w-full !rounded-none !rounded-r-lg",
};
let badgePre: IABadgeProps = {
v: "http://",
t: "pre",
};
let labelPost: IALabelProps = {
v: "Weight",
c: "pr-2",
required: true,
right: true,
tooltip: { v: "weight" },
};
const options: TSelectOption[] = [
{
id: "50",
name: "50",
},
{
id: "100",
name: "100",
},
{
id: "200",
name: "200",
},
];
let select: IASelectProps = {
v: { id: "", name: "" },
options: options,
fullwidth: true,
c: "!w-5rem",
buttonc: "!rounded-none !rounded-l-lg",
};
let badgePost: IABadgeProps = {
v: "kg",
t: "post",
c: "mb-0.6",
};
let labelUp: IALabelProps = {
v: "Username",
c: "pr-2",
required: true,
tooltip: { v: "user name" },
};
let propsButton = reactive<IAButtonProps>({
v: "Submit",
t: "focusblock",
c: "text-white bg-sky-5 hover:bg-sky-6 focus:ring-sky-5",
});
let alertErrorSuccess: IAAlertErrorProps = {
v: "Success",
show: true,
c: "w-full",
};
let propsSlot = reactive<IAButtonProps>({
v: "Slot",
t: "focusblock",
c: "text-white bg-sky-5 hover:bg-sky-6 focus:ring-sky-5",
});
let labelRes: IALabelProps = {
v: "Username",
c: "pr-2",
required: true,
tooltip: { v: "user name" },
};
function notify(e: string) {
props.v = e;
console.log(props.v);
}
const assign = (obj: TSelectOption, updateObj: TSelectOption) => {
Object.assign(obj, updateObj);
if (!updateObj.display) {
delete obj.display;
}
};
</script>Slot
- One default slot for your own markups/components replacing dynamic AgufaUI component
- One named slot
infofor info message - One named slot
msgfor error and success message - One named slot
prefor your own markups/components replacing prependAbadgecomponent - One named slot
postfor your own markups/components replacing postpendAbadgecomponent
AgufaUI provided Theme
CDefaultType is just string constant "default"
ts
import { CDefaultType, CUseType } from "@agufaui/config";
import type { IASdProps } from "../../types/form/ASd";
export const DASdDefault = {
labelgridasdc: "grid grid-cols-3",
labelgridspanasdc: "col-span-2",
};
export const DASdGrid4 = {
[CUseType]: CDefaultType,
labelgridasdc: "d@grid-cols-3 grid-cols-4",
labelgridspanasdc: "d@col-span-2 col-span-3",
};
export const DASdResponsive = {
labelgridasdc: "grid sm:grid-cols-3",
labelgridspanasdc: "sm:col-span-2",
labelc: "justify-start sm:justify-end",
};
export const DASdResponsiveGrid4 = {
[CUseType]: "res",
labelgridasdc: "d@sm:grid-cols-3 sm:grid-cols-4",
labelgridspanasdc: "d@sm:col-span-2 sm:col-span-3",
};
export const DASd: Readonly<Record<string, Partial<IASdProps<any>>>> = {
[CDefaultType]: DASdDefault,
grid4: DASdGrid4,
res: DASdResponsive,
resgrid4: DASdResponsiveGrid4,
};
Attributes (Properties)
Default Values
vue
spacey: "space-y-1",Unique
ts
export interface IASdProps<T extends IProps> extends IProps, IPropsComposeY {
labelasd?: IALabelProps; // label
labelgridasdc?: string; // if there is a label, display grid
labelgridspanasdc?: string; // if there is a label, dynamic component span how many columns of a grid
uplabelasd?: boolean; // if label position at top of control
labelc?: string; // css classes for label
componentc?: string; // css classes for component container 'div' html element
vasd?: string; // component name (eg. button stands for Abutton). Not configurable
dirasd?: string; // component file dir (eg. button for Abutton)
propsasd?: T; // component props
attrsasd?: Record<string, any>; // html element attributes, eg. for 'a' tag, 'target' attribute
errorasd?: boolean; // if there is error
prependasd?: IABadgeProps; // prepend to dynamic component
postpendasd?: IABadgeProps; // postpend to dynamic component
infoc?: string; // css classes for info message `aalert` child component
alertasd?: IAAlertProps;
msgc?: string; // css classes for error or success message `aalertError` child component
alerterrorasd?: IAAlertErrorProps;
}Inherit from IProps
ts
export interface IProps {
t?: string; // user defined or AgufaUI provided component type. Not configurable
c?: string; // css classes for component root html element
}Inherit from IPropsComposeY
ts
// #region iprops
export interface IProps {
t?: string; // user defined or AgufaUI provided component type. Not configurable
c?: string; // css classes for component root html element
}
// #endregion iprops
// #region ipropscomposex
export interface IPropsComposeX {
spacex?: string; // space between elements in x-axis eg. space-x-1.5
}
// #endregion ipropscomposex
// #region ipropscomposey;
export interface IPropsComposeY {
spacey?: string; // space between elements in y-axis eg. space-y-1.5
}
// #endregion ipropscomposey;
// #region ipropsform
export interface IPropsForm {
disabled?: boolean; // disabled
}
// #endregion ipropsform
// #region ipropsicon
export type TLRPosition = "left" | "right";
export interface IPropsIcon {
i?: string; // icon eg. i-eos-icons:loading
ipos?: TLRPosition; // icon position
ic?: string; // css classes for icon element
}
// #endregion ipropsicon
// #region ipropsloading
export interface IPropsLoading extends IPropsIcon {
loading?: boolean; // loading
}
// #endregion ipropsloading