Fix: remove daisyui
We wanted to remove daisyui a long time ago Since renovate updates broke all of the classes somehow we use the opportunity to remove daisyui And will fix all the breakages continously as we work on the features
This commit is contained in:
45
pkgs/webview-ui/app/package-lock.json
generated
45
pkgs/webview-ui/app/package-lock.json
generated
@@ -31,7 +31,6 @@
|
|||||||
"@typescript-eslint/parser": "^7.10.0",
|
"@typescript-eslint/parser": "^7.10.0",
|
||||||
"autoprefixer": "^10.4.19",
|
"autoprefixer": "^10.4.19",
|
||||||
"classnames": "^2.5.1",
|
"classnames": "^2.5.1",
|
||||||
"daisyui": "^4.11.1",
|
|
||||||
"eslint": "^8.57.0",
|
"eslint": "^8.57.0",
|
||||||
"eslint-plugin-tailwindcss": "^3.17.0",
|
"eslint-plugin-tailwindcss": "^3.17.0",
|
||||||
"jsdom": "^24.1.0",
|
"jsdom": "^24.1.0",
|
||||||
@@ -2837,16 +2836,6 @@
|
|||||||
"url": "https://github.com/sponsors/fb55"
|
"url": "https://github.com/sponsors/fb55"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/css-selector-tokenizer": {
|
|
||||||
"version": "0.8.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.8.0.tgz",
|
|
||||||
"integrity": "sha512-Jd6Ig3/pe62/qe5SBPTN8h8LeUg/pT4lLgtavPf7updwwHpvFzxvOQBHYj2LZDMjUnBzgvIUSjRcf6oT5HzHFg==",
|
|
||||||
"dev": true,
|
|
||||||
"dependencies": {
|
|
||||||
"cssesc": "^3.0.0",
|
|
||||||
"fastparse": "^1.1.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/css-tree": {
|
"node_modules/css-tree": {
|
||||||
"version": "2.3.1",
|
"version": "2.3.1",
|
||||||
"resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz",
|
"resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz",
|
||||||
@@ -2946,34 +2935,6 @@
|
|||||||
"integrity": "sha512-d4ZVpCW31eWwCMe1YT3ur7mUDnTXbgwyzaL320DrcRT45rfjYxkt5QWLrmOJ+/UEAI2+fQgKe/fCjR8l4TpRgw==",
|
"integrity": "sha512-d4ZVpCW31eWwCMe1YT3ur7mUDnTXbgwyzaL320DrcRT45rfjYxkt5QWLrmOJ+/UEAI2+fQgKe/fCjR8l4TpRgw==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/culori": {
|
|
||||||
"version": "3.3.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/culori/-/culori-3.3.0.tgz",
|
|
||||||
"integrity": "sha512-pHJg+jbuFsCjz9iclQBqyL3B2HLCBF71BwVNujUYEvCeQMvV97R59MNK3R2+jgJ3a1fcZgI9B3vYgz8lzr/BFQ==",
|
|
||||||
"dev": true,
|
|
||||||
"engines": {
|
|
||||||
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/daisyui": {
|
|
||||||
"version": "4.11.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/daisyui/-/daisyui-4.11.1.tgz",
|
|
||||||
"integrity": "sha512-obT9CUbQdW6eoHwSeT5VwaRrWlwrM4OT5qlfdJ0oQlSIEYhwnEl2+L2fwu5PioLbitwuMdYC2X8I1cyy8Pf6LQ==",
|
|
||||||
"dev": true,
|
|
||||||
"dependencies": {
|
|
||||||
"css-selector-tokenizer": "^0.8",
|
|
||||||
"culori": "^3",
|
|
||||||
"picocolors": "^1",
|
|
||||||
"postcss-js": "^4"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=16.9.0"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"type": "opencollective",
|
|
||||||
"url": "https://opencollective.com/daisyui"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/data-urls": {
|
"node_modules/data-urls": {
|
||||||
"version": "5.0.0",
|
"version": "5.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz",
|
||||||
@@ -3626,12 +3587,6 @@
|
|||||||
"resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
|
"resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
|
||||||
"integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw=="
|
"integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw=="
|
||||||
},
|
},
|
||||||
"node_modules/fastparse": {
|
|
||||||
"version": "1.1.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz",
|
|
||||||
"integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"node_modules/fastq": {
|
"node_modules/fastq": {
|
||||||
"version": "1.17.1",
|
"version": "1.17.1",
|
||||||
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
|
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
|
||||||
|
|||||||
@@ -20,7 +20,6 @@
|
|||||||
"@typescript-eslint/parser": "^7.10.0",
|
"@typescript-eslint/parser": "^7.10.0",
|
||||||
"autoprefixer": "^10.4.19",
|
"autoprefixer": "^10.4.19",
|
||||||
"classnames": "^2.5.1",
|
"classnames": "^2.5.1",
|
||||||
"daisyui": "^4.11.1",
|
|
||||||
"eslint": "^8.57.0",
|
"eslint": "^8.57.0",
|
||||||
"eslint-plugin-tailwindcss": "^3.17.0",
|
"eslint-plugin-tailwindcss": "^3.17.0",
|
||||||
"jsdom": "^24.1.0",
|
"jsdom": "^24.1.0",
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ interface LabelProps {
|
|||||||
}
|
}
|
||||||
export const Label = (props: LabelProps) => (
|
export const Label = (props: LabelProps) => (
|
||||||
<span
|
<span
|
||||||
class="label-text block"
|
class=" block"
|
||||||
classList={{
|
classList={{
|
||||||
"after:ml-0.5 after:text-primary after:content-['*']": props.required,
|
"after:ml-0.5 after:text-primary after:content-['*']": props.required,
|
||||||
}}
|
}}
|
||||||
|
|||||||
@@ -192,7 +192,7 @@ export function SelectInput(props: SelectInputpProps) {
|
|||||||
{item}
|
{item}
|
||||||
<Show when={props.multiple}>
|
<Show when={props.multiple}>
|
||||||
<button
|
<button
|
||||||
class="btn-ghost btn-xs"
|
class=""
|
||||||
type="button"
|
type="button"
|
||||||
onClick={(_e) => {
|
onClick={(_e) => {
|
||||||
// @ts-expect-error: fieldName is not known ahead of time
|
// @ts-expect-error: fieldName is not known ahead of time
|
||||||
@@ -247,7 +247,7 @@ export function SelectInput(props: SelectInputpProps) {
|
|||||||
}}
|
}}
|
||||||
class="z-[1000] shadow"
|
class="z-[1000] shadow"
|
||||||
>
|
>
|
||||||
<ul class="menu flex max-h-96 flex-col gap-1 overflow-x-hidden overflow-y-scroll">
|
<ul class="flex max-h-96 flex-col gap-1 overflow-x-hidden overflow-y-scroll">
|
||||||
<Show when={!props.loading} fallback={"Loading ...."}>
|
<Show when={!props.loading} fallback={"Loading ...."}>
|
||||||
<For each={props.options}>
|
<For each={props.options}>
|
||||||
{(opt) => (
|
{(opt) => (
|
||||||
|
|||||||
@@ -305,7 +305,7 @@ export function StringField<T extends FieldValues, R extends ResponseData>(
|
|||||||
// placeholder="foobar"
|
// placeholder="foobar"
|
||||||
// inlineLabel={
|
// inlineLabel={
|
||||||
// <div class="label">
|
// <div class="label">
|
||||||
// <span class="label-text"></span>
|
// <span class=""></span>
|
||||||
// </div>
|
// </div>
|
||||||
// }
|
// }
|
||||||
// required
|
// required
|
||||||
@@ -629,7 +629,7 @@ export function ArrayFields<T extends FieldValues, R extends ResponseData>(
|
|||||||
</ListValueDisplay>
|
</ListValueDisplay>
|
||||||
)}
|
)}
|
||||||
</For>
|
</For>
|
||||||
<span class="label-text-alt font-bold text-error-700">
|
<span class=" font-bold text-error-700">
|
||||||
{fieldArray.error}
|
{fieldArray.error}
|
||||||
</span>
|
</span>
|
||||||
|
|
||||||
@@ -814,7 +814,7 @@ export function ObjectFields<T extends FieldValues, R extends ResponseData>(
|
|||||||
<For
|
<For
|
||||||
fallback={
|
fallback={
|
||||||
<>
|
<>
|
||||||
<label class="label-text">
|
<label class="">
|
||||||
No{" "}
|
No{" "}
|
||||||
<ObjectFieldPropertyLabel
|
<ObjectFieldPropertyLabel
|
||||||
schema={itemSchema()}
|
schema={itemSchema()}
|
||||||
|
|||||||
@@ -44,10 +44,10 @@ export function FileInput(props: FileInputProps) {
|
|||||||
);
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div class={cx("form-control w-full", props.class)}>
|
<div class={cx(" w-full", props.class)}>
|
||||||
<div class="label">
|
<div class="">
|
||||||
<span
|
<span
|
||||||
class="label-text block"
|
class=" block"
|
||||||
classList={{
|
classList={{
|
||||||
"after:ml-0.5 after:text-primary after:content-['*']":
|
"after:ml-0.5 after:text-primary after:content-['*']":
|
||||||
props.required,
|
props.required,
|
||||||
@@ -57,7 +57,7 @@ export function FileInput(props: FileInputProps) {
|
|||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<Show when={props.helperText}>
|
<Show when={props.helperText}>
|
||||||
<span class="label-text-alt m-1">{props.helperText}</span>
|
<span class=" m-1">{props.helperText}</span>
|
||||||
</Show>
|
</Show>
|
||||||
<div
|
<div
|
||||||
class={cx(
|
class={cx(
|
||||||
@@ -92,9 +92,7 @@ export function FileInput(props: FileInputProps) {
|
|||||||
aria-errormessage={`${props.name}-error`}
|
aria-errormessage={`${props.name}-error`}
|
||||||
/>
|
/>
|
||||||
{props.error && (
|
{props.error && (
|
||||||
<span class="label-text-alt font-bold text-error-700">
|
<span class=" font-bold text-error-700">{props.error}</span>
|
||||||
{props.error}
|
|
||||||
</span>
|
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -108,15 +108,15 @@ export const MachineListItem = (props: MachineListItemProps) => {
|
|||||||
setUpdating(false);
|
setUpdating(false);
|
||||||
};
|
};
|
||||||
return (
|
return (
|
||||||
<div class="card card-side m-2">
|
<div class=" m-2">
|
||||||
<figure class="h-fit rounded-xl border bg-def-2 border-def-5">
|
<figure class="h-fit rounded-xl border bg-def-2 border-def-5">
|
||||||
<RndThumbnail name={name} width={220} height={120} />
|
<RndThumbnail name={name} width={220} height={120} />
|
||||||
</figure>
|
</figure>
|
||||||
<div class="card-body flex-row justify-between ">
|
<div class=" flex-row justify-between ">
|
||||||
<div class="flex flex-col">
|
<div class="flex flex-col">
|
||||||
<A href={`/machines/${name}`}>
|
<A href={`/machines/${name}`}>
|
||||||
<h2
|
<h2
|
||||||
class="card-title underline"
|
class=" underline"
|
||||||
classList={{
|
classList={{
|
||||||
"text-neutral-500": nixOnly,
|
"text-neutral-500": nixOnly,
|
||||||
}}
|
}}
|
||||||
@@ -168,7 +168,7 @@ export const MachineListItem = (props: MachineListItemProps) => {
|
|||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<Menu popoverid={`menu-${props.name}`} label={<Icon icon={"More"} />}>
|
<Menu popoverid={`menu-${props.name}`} label={<Icon icon={"More"} />}>
|
||||||
<ul class="menu z-[1] w-52 rounded-box bg-base-100 p-2 shadow">
|
<ul class="z-[1] w-52 p-2 shadow">
|
||||||
<li>
|
<li>
|
||||||
<a
|
<a
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ export const Menu = (props: MenuProps) => {
|
|||||||
popovertarget={props.popoverid}
|
popovertarget={props.popoverid}
|
||||||
popovertargetaction="toggle"
|
popovertargetaction="toggle"
|
||||||
ref={setReference}
|
ref={setReference}
|
||||||
class={cx("join-item", props.buttonClass)}
|
class={cx("", props.buttonClass)}
|
||||||
{...props.buttonProps}
|
{...props.buttonProps}
|
||||||
>
|
>
|
||||||
{props.label}
|
{props.label}
|
||||||
|
|||||||
@@ -20,12 +20,12 @@ export function SelectInput<T extends FieldValues, R extends ResponseData>(
|
|||||||
) {
|
) {
|
||||||
return (
|
return (
|
||||||
<label
|
<label
|
||||||
class={cx("form-control w-full", props.class)}
|
class={cx(" w-full", props.class)}
|
||||||
aria-disabled={props.formStore.submitting}
|
aria-disabled={props.formStore.submitting}
|
||||||
>
|
>
|
||||||
<div class="label">
|
<div class="">
|
||||||
<span
|
<span
|
||||||
class="label-text block"
|
class=" block"
|
||||||
classList={{
|
classList={{
|
||||||
"after:ml-0.5 after:text-primary after:content-['*']":
|
"after:ml-0.5 after:text-primary after:content-['*']":
|
||||||
props.required,
|
props.required,
|
||||||
@@ -34,22 +34,20 @@ export function SelectInput<T extends FieldValues, R extends ResponseData>(
|
|||||||
{props.label}
|
{props.label}
|
||||||
</span>
|
</span>
|
||||||
<Show when={props.topRightLabel}>
|
<Show when={props.topRightLabel}>
|
||||||
<span class="label-text-alt">{props.topRightLabel}</span>
|
<span class="">{props.topRightLabel}</span>
|
||||||
</Show>
|
</Show>
|
||||||
</div>
|
</div>
|
||||||
<select
|
<select
|
||||||
{...props.selectProps}
|
{...props.selectProps}
|
||||||
required={props.required}
|
required={props.required}
|
||||||
class="select select-bordered w-full"
|
class="w-full"
|
||||||
value={props.value}
|
value={props.value}
|
||||||
>
|
>
|
||||||
{props.options}
|
{props.options}
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
{props.error && (
|
{props.error && (
|
||||||
<span class="label-text-alt font-bold text-error-700">
|
<span class=" font-bold text-error-700">{props.error}</span>
|
||||||
{props.error}
|
|
||||||
</span>
|
|
||||||
)}
|
)}
|
||||||
</label>
|
</label>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -142,7 +142,7 @@ export const InputLabel = (props: InputLabelProps) => {
|
|||||||
)}
|
)}
|
||||||
{props.help && (
|
{props.help && (
|
||||||
<span
|
<span
|
||||||
class="tooltip tooltip-bottom inline px-2"
|
class=" inline px-2"
|
||||||
data-tip={props.help}
|
data-tip={props.help}
|
||||||
style={{
|
style={{
|
||||||
"--tooltip-color": "#EFFFFF",
|
"--tooltip-color": "#EFFFFF",
|
||||||
|
|||||||
@@ -9,14 +9,11 @@ interface HeaderProps {
|
|||||||
}
|
}
|
||||||
export const Header = (props: HeaderProps) => {
|
export const Header = (props: HeaderProps) => {
|
||||||
return (
|
return (
|
||||||
<div class="navbar border-b px-6 py-4 border-def-3">
|
<div class=" border-b px-6 py-4 border-def-3">
|
||||||
<div class="flex-none">
|
<div class="flex-none">
|
||||||
{props.showBack && <BackButton />}
|
{props.showBack && <BackButton />}
|
||||||
<span class="tooltip tooltip-bottom lg:hidden" data-tip="Menu">
|
<span class=" lg:hidden" data-tip="Menu">
|
||||||
<label
|
<label class=" " for="toplevel-drawer">
|
||||||
class="btn btn-square btn-ghost drawer-button"
|
|
||||||
for="toplevel-drawer"
|
|
||||||
>
|
|
||||||
<span class="material-icons">menu</span>
|
<span class="material-icons">menu</span>
|
||||||
</label>
|
</label>
|
||||||
</span>
|
</span>
|
||||||
|
|||||||
@@ -17,17 +17,13 @@ export const Layout: Component<RouteSectionProps> = (props) => {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div class="h-screen w-full p-4 bg-def-2">
|
<div class="h-screen w-full p-4 bg-def-2">
|
||||||
<div class="drawer h-full lg:drawer-open ">
|
<div class="h-full ">
|
||||||
<input
|
<input id="toplevel-drawer" type="checkbox" class=" hidden" />
|
||||||
id="toplevel-drawer"
|
<div class=" my-2 ml-8 overflow-x-hidden overflow-y-scroll rounded-lg border bg-def-1 border-def-3">
|
||||||
type="checkbox"
|
|
||||||
class="drawer-toggle hidden"
|
|
||||||
/>
|
|
||||||
<div class="drawer-content my-2 ml-8 overflow-x-hidden overflow-y-scroll rounded-lg border bg-def-1 border-def-3">
|
|
||||||
{props.children}
|
{props.children}
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
class="drawer-side z-40 h-full !overflow-hidden"
|
class=" z-40 h-full !overflow-hidden"
|
||||||
classList={{
|
classList={{
|
||||||
"!hidden":
|
"!hidden":
|
||||||
props.location.pathname === "welcome" || clanList().length === 0,
|
props.location.pathname === "welcome" || clanList().length === 0,
|
||||||
@@ -36,7 +32,7 @@ export const Layout: Component<RouteSectionProps> = (props) => {
|
|||||||
<label
|
<label
|
||||||
for="toplevel-drawer"
|
for="toplevel-drawer"
|
||||||
aria-label="close sidebar"
|
aria-label="close sidebar"
|
||||||
class="drawer-overlay !h-full !overflow-hidden "
|
class=" !h-full !overflow-hidden "
|
||||||
></label>
|
></label>
|
||||||
<Sidebar {...props} />
|
<Sidebar {...props} />
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -71,7 +71,7 @@ export const CreateClan = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div class="card card-normal">
|
<div class="">
|
||||||
<Form onSubmit={handleSubmit} shouldActive>
|
<Form onSubmit={handleSubmit} shouldActive>
|
||||||
<Field name="icon">
|
<Field name="icon">
|
||||||
{(field, props) => (
|
{(field, props) => (
|
||||||
@@ -97,15 +97,15 @@ export const CreateClan = () => {
|
|||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
</Field>
|
</Field>
|
||||||
<div class="card-body">
|
<div class="">
|
||||||
<Field
|
<Field
|
||||||
name="name"
|
name="name"
|
||||||
validate={[required("Please enter a unique name for the clan.")]}
|
validate={[required("Please enter a unique name for the clan.")]}
|
||||||
>
|
>
|
||||||
{(field, props) => (
|
{(field, props) => (
|
||||||
<label class="form-control w-full">
|
<label class=" w-full">
|
||||||
<div class="label">
|
<div class="">
|
||||||
<span class="label-text block after:ml-0.5 after:text-primary-800 after:content-['*']">
|
<span class=" block after:ml-0.5 after:text-primary-800 after:content-['*']">
|
||||||
Name
|
Name
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
@@ -115,23 +115,20 @@ export const CreateClan = () => {
|
|||||||
disabled={formStore.submitting}
|
disabled={formStore.submitting}
|
||||||
required
|
required
|
||||||
placeholder="Give your Clan a legendary name"
|
placeholder="Give your Clan a legendary name"
|
||||||
class="input input-bordered"
|
classList={{ "": !!field.error }}
|
||||||
classList={{ "input-error": !!field.error }}
|
|
||||||
value={field.value}
|
value={field.value}
|
||||||
/>
|
/>
|
||||||
<div class="label">
|
<div class="">
|
||||||
{field.error && (
|
{field.error && <span class="">{field.error}</span>}
|
||||||
<span class="label-text-alt">{field.error}</span>
|
|
||||||
)}
|
|
||||||
</div>
|
</div>
|
||||||
</label>
|
</label>
|
||||||
)}
|
)}
|
||||||
</Field>
|
</Field>
|
||||||
<Field name="description">
|
<Field name="description">
|
||||||
{(field, props) => (
|
{(field, props) => (
|
||||||
<label class="form-control w-full">
|
<label class=" w-full">
|
||||||
<div class="label">
|
<div class="">
|
||||||
<span class="label-text">Description</span>
|
<span class="">Description</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<input
|
<input
|
||||||
@@ -140,24 +137,21 @@ export const CreateClan = () => {
|
|||||||
required
|
required
|
||||||
type="text"
|
type="text"
|
||||||
placeholder="Tell us what makes your Clan legendary"
|
placeholder="Tell us what makes your Clan legendary"
|
||||||
class="input input-bordered"
|
classList={{ "": !!field.error }}
|
||||||
classList={{ "input-error": !!field.error }}
|
|
||||||
value={field.value || ""}
|
value={field.value || ""}
|
||||||
/>
|
/>
|
||||||
<div class="label">
|
<div class="">
|
||||||
{field.error && (
|
{field.error && <span class="">{field.error}</span>}
|
||||||
<span class="label-text-alt">{field.error}</span>
|
|
||||||
)}
|
|
||||||
</div>
|
</div>
|
||||||
</label>
|
</label>
|
||||||
)}
|
)}
|
||||||
</Field>
|
</Field>
|
||||||
<Field name="template" validate={[required("This is required")]}>
|
<Field name="template" validate={[required("This is required")]}>
|
||||||
{(field, props) => (
|
{(field, props) => (
|
||||||
<div class="collapse collapse-arrow" tabindex="0">
|
<div class=" " tabindex="0">
|
||||||
<input type="checkbox" />
|
<input type="checkbox" />
|
||||||
<div class="collapse-title link font-medium ">Advanced</div>
|
<div class=" font-medium ">Advanced</div>
|
||||||
<div class="collapse-content">
|
<div>
|
||||||
<TextInput
|
<TextInput
|
||||||
// adornment={{
|
// adornment={{
|
||||||
// content: (
|
// content: (
|
||||||
@@ -176,7 +170,7 @@ export const CreateClan = () => {
|
|||||||
)}
|
)}
|
||||||
</Field>
|
</Field>
|
||||||
{
|
{
|
||||||
<div class="card-actions justify-end">
|
<div class=" justify-end">
|
||||||
<Button
|
<Button
|
||||||
type="submit"
|
type="submit"
|
||||||
disabled={formStore.submitting}
|
disabled={formStore.submitting}
|
||||||
|
|||||||
@@ -78,16 +78,16 @@ const EditClanForm = (props: EditClanFormProps) => {
|
|||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
</Field>
|
</Field>
|
||||||
<div class="card-body">
|
<div class="">
|
||||||
<span class="text-xl text-primary-800">General</span>
|
<span class="text-xl text-primary-800">General</span>
|
||||||
<Field
|
<Field
|
||||||
name="name"
|
name="name"
|
||||||
validate={[required("Please enter a unique name for the clan.")]}
|
validate={[required("Please enter a unique name for the clan.")]}
|
||||||
>
|
>
|
||||||
{(field, props) => (
|
{(field, props) => (
|
||||||
<label class="form-control w-full">
|
<label class="w-full">
|
||||||
<div class="label">
|
<div class="">
|
||||||
<span class="label-text block after:ml-0.5 after:text-primary-800 after:content-['*']">
|
<span class=" block after:ml-0.5 after:text-primary-800 after:content-['*']">
|
||||||
Name
|
Name
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
@@ -97,23 +97,21 @@ const EditClanForm = (props: EditClanFormProps) => {
|
|||||||
disabled={formStore.submitting}
|
disabled={formStore.submitting}
|
||||||
required
|
required
|
||||||
placeholder="Clan Name"
|
placeholder="Clan Name"
|
||||||
class="input input-bordered"
|
class=""
|
||||||
classList={{ "input-error": !!field.error }}
|
classList={{ "": !!field.error }}
|
||||||
value={field.value}
|
value={field.value}
|
||||||
/>
|
/>
|
||||||
<div class="label">
|
<div class="">
|
||||||
{field.error && (
|
{field.error && <span class="">{field.error}</span>}
|
||||||
<span class="label-text-alt">{field.error}</span>
|
|
||||||
)}
|
|
||||||
</div>
|
</div>
|
||||||
</label>
|
</label>
|
||||||
)}
|
)}
|
||||||
</Field>
|
</Field>
|
||||||
<Field name="description">
|
<Field name="description">
|
||||||
{(field, props) => (
|
{(field, props) => (
|
||||||
<label class="form-control w-full">
|
<label class="w-full">
|
||||||
<div class="label">
|
<div class="">
|
||||||
<span class="label-text">Description</span>
|
<span class="">Description</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<input
|
<input
|
||||||
@@ -122,20 +120,18 @@ const EditClanForm = (props: EditClanFormProps) => {
|
|||||||
required
|
required
|
||||||
type="text"
|
type="text"
|
||||||
placeholder="Some words about your clan"
|
placeholder="Some words about your clan"
|
||||||
class="input input-bordered"
|
class=""
|
||||||
classList={{ "input-error": !!field.error }}
|
classList={{ "": !!field.error }}
|
||||||
value={field.value || ""}
|
value={field.value || ""}
|
||||||
/>
|
/>
|
||||||
<div class="label">
|
<div class="">
|
||||||
{field.error && (
|
{field.error && <span class="">{field.error}</span>}
|
||||||
<span class="label-text-alt">{field.error}</span>
|
|
||||||
)}
|
|
||||||
</div>
|
</div>
|
||||||
</label>
|
</label>
|
||||||
)}
|
)}
|
||||||
</Field>
|
</Field>
|
||||||
{
|
{
|
||||||
<div class="card-actions justify-end">
|
<div class="justify-end">
|
||||||
<Button
|
<Button
|
||||||
type="submit"
|
type="submit"
|
||||||
disabled={formStore.submitting || !formStore.dirty}
|
disabled={formStore.submitting || !formStore.dirty}
|
||||||
@@ -203,7 +199,7 @@ const AdminModuleForm = (props: AdminModuleFormProps) => {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<Form onSubmit={handleSubmit}>
|
<Form onSubmit={handleSubmit}>
|
||||||
<div class="card-body">
|
<div class="">
|
||||||
<span class="text-xl text-primary-800">Administration</span>
|
<span class="text-xl text-primary-800">Administration</span>
|
||||||
<div class="grid grid-cols-12 gap-2">
|
<div class="grid grid-cols-12 gap-2">
|
||||||
<span class="col-span-12 text-lg text-neutral-800">
|
<span class="col-span-12 text-lg text-neutral-800">
|
||||||
@@ -241,15 +237,12 @@ const AdminModuleForm = (props: AdminModuleFormProps) => {
|
|||||||
class="col-span-6"
|
class="col-span-6"
|
||||||
required
|
required
|
||||||
/>
|
/>
|
||||||
<span
|
<span class=" col-span-12 mt-auto" data-tip="Select file">
|
||||||
class="tooltip col-span-12 mt-auto"
|
|
||||||
data-tip="Select file"
|
|
||||||
>
|
|
||||||
<label
|
<label
|
||||||
class={"form-control w-full"}
|
class={"w-full"}
|
||||||
aria-disabled={formStore.submitting}
|
aria-disabled={formStore.submitting}
|
||||||
>
|
>
|
||||||
<div class="btn btn-secondary relative flex items-center justify-center">
|
<div class="relative flex items-center justify-center">
|
||||||
<input
|
<input
|
||||||
value=""
|
value=""
|
||||||
// Disable drag n drop
|
// Disable drag n drop
|
||||||
@@ -312,7 +305,7 @@ const AdminModuleForm = (props: AdminModuleFormProps) => {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{
|
{
|
||||||
<div class="card-actions justify-end">
|
<div class=" justify-end">
|
||||||
<Button
|
<Button
|
||||||
type="submit"
|
type="submit"
|
||||||
disabled={formStore.submitting || !formStore.dirty}
|
disabled={formStore.submitting || !formStore.dirty}
|
||||||
|
|||||||
@@ -60,20 +60,20 @@ const ClanItem = (props: ClanItemProps) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div class="stat">
|
<div class="">
|
||||||
<div class="stat-figure text-primary-800">
|
<div class=" text-primary-800">
|
||||||
<div class="join">
|
<div class="">
|
||||||
<Button
|
<Button
|
||||||
size="s"
|
size="s"
|
||||||
variant="light"
|
variant="light"
|
||||||
class="join-item"
|
class=""
|
||||||
onClick={() => navigate(`/clans/${window.btoa(clan_dir)}`)}
|
onClick={() => navigate(`/clans/${window.btoa(clan_dir)}`)}
|
||||||
endIcon={<Icon icon="Settings" />}
|
endIcon={<Icon icon="Settings" />}
|
||||||
></Button>
|
></Button>
|
||||||
<Button
|
<Button
|
||||||
size="s"
|
size="s"
|
||||||
variant="light"
|
variant="light"
|
||||||
class="join-item "
|
class=" "
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
setActiveURI(clan_dir);
|
setActiveURI(clan_dir);
|
||||||
}}
|
}}
|
||||||
@@ -86,7 +86,7 @@ const ClanItem = (props: ClanItemProps) => {
|
|||||||
popovertarget={`clan-delete-popover-${clan_dir}`}
|
popovertarget={`clan-delete-popover-${clan_dir}`}
|
||||||
popovertargetaction="toggle"
|
popovertargetaction="toggle"
|
||||||
ref={setReference}
|
ref={setReference}
|
||||||
class="btn btn-ghost btn-outline join-item"
|
class=" "
|
||||||
endIcon={<Icon icon="Trash" />}
|
endIcon={<Icon icon="Trash" />}
|
||||||
></Button>
|
></Button>
|
||||||
<div
|
<div
|
||||||
@@ -113,24 +113,24 @@ const ClanItem = (props: ClanItemProps) => {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
class="stat-title"
|
class=""
|
||||||
classList={{
|
classList={{
|
||||||
"badge badge-primary": activeURI() === clan_dir,
|
"": activeURI() === clan_dir,
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{clan_dir}
|
{clan_dir}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<Show when={details.isLoading}>
|
<Show when={details.isLoading}>
|
||||||
<div class="skeleton h-12 w-80" />
|
<div class=" h-12 w-80" />
|
||||||
</Show>
|
</Show>
|
||||||
<Show when={details.isSuccess}>
|
<Show when={details.isSuccess}>
|
||||||
<A href={`/clans/${window.btoa(clan_dir)}`}>
|
<A href={`/clans/${window.btoa(clan_dir)}`}>
|
||||||
<div class="stat-value underline">{details.data?.name}</div>
|
<div class=" underline">{details.data?.name}</div>
|
||||||
</A>
|
</A>
|
||||||
</Show>
|
</Show>
|
||||||
<Show when={details.isSuccess && details.data?.description}>
|
<Show when={details.isSuccess && details.data?.description}>
|
||||||
<div class="stat-desc text-lg">{details.data?.description}</div>
|
<div class=" text-lg">{details.data?.description}</div>
|
||||||
</Show>
|
</Show>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
@@ -139,19 +139,19 @@ const ClanItem = (props: ClanItemProps) => {
|
|||||||
export const ClanList = () => {
|
export const ClanList = () => {
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
return (
|
return (
|
||||||
<div class="card card-normal">
|
<div class="">
|
||||||
<div class="card-body">
|
<div class="">
|
||||||
<div class="label">
|
<div class="">
|
||||||
<div class="label-text text-2xl text-neutral">Registered Clans</div>
|
<div class=" text-2xl">Registered Clans</div>
|
||||||
<div class="flex gap-2">
|
<div class="flex gap-2">
|
||||||
<span class="tooltip tooltip-top" data-tip="Register clan">
|
<span class="" data-tip="Register clan">
|
||||||
<Button
|
<Button
|
||||||
variant="light"
|
variant="light"
|
||||||
onClick={registerClan}
|
onClick={registerClan}
|
||||||
startIcon={<Icon icon="List" />}
|
startIcon={<Icon icon="List" />}
|
||||||
></Button>
|
></Button>
|
||||||
</span>
|
</span>
|
||||||
<span class="tooltip tooltip-top" data-tip="Create new clan">
|
<span class="" data-tip="Create new clan">
|
||||||
<Button
|
<Button
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
navigate("create");
|
navigate("create");
|
||||||
@@ -161,7 +161,7 @@ export const ClanList = () => {
|
|||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="stats stats-vertical shadow">
|
<div class=" shadow">
|
||||||
<For each={clanList()}>
|
<For each={clanList()}>
|
||||||
{(value) => <ClanItem clan_dir={value} />}
|
{(value) => <ClanItem clan_dir={value} />}
|
||||||
</For>
|
</For>
|
||||||
|
|||||||
@@ -401,12 +401,12 @@ export const Flash = () => {
|
|||||||
</For>
|
</For>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="collapse collapse-arrow" tabindex="0">
|
<div class=" " tabindex="0">
|
||||||
<input type="checkbox" />
|
<input type="checkbox" />
|
||||||
<div class="collapse-title px-0">
|
<div class=" px-0">
|
||||||
<InputLabel class="mb-4">Advanced</InputLabel>
|
<InputLabel class="mb-4">Advanced</InputLabel>
|
||||||
</div>
|
</div>
|
||||||
<div class="collapse-content">
|
<div class="">
|
||||||
<Field
|
<Field
|
||||||
name="machine.flake"
|
name="machine.flake"
|
||||||
validate={[required("This field is required")]}
|
validate={[required("This field is required")]}
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ export const HostList: Component = () => {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<div class="tooltip tooltip-bottom" data-tip="Refresh install targets">
|
<div class="" data-tip="Refresh install targets">
|
||||||
<Button
|
<Button
|
||||||
variant="light"
|
variant="light"
|
||||||
onClick={() => callApi("show_mdns", {})}
|
onClick={() => callApi("show_mdns", {})}
|
||||||
@@ -26,27 +26,25 @@ export const HostList: Component = () => {
|
|||||||
<For each={Object.values(services())}>
|
<For each={Object.values(services())}>
|
||||||
{(service) => (
|
{(service) => (
|
||||||
<div class="w-[30rem] rounded-lg bg-white p-5 shadow-lg">
|
<div class="w-[30rem] rounded-lg bg-white p-5 shadow-lg">
|
||||||
<div class="stats flex flex-col shadow">
|
<div class=" flex flex-col shadow">
|
||||||
<div class="stat">
|
<div class="">
|
||||||
<div class="stat-title">Host</div>
|
<div class="">Host</div>
|
||||||
<div class="stat-value">{service.host}</div>
|
<div class="">{service.host}</div>
|
||||||
<div class="stat-desc"></div>
|
<div class=""></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="stat">
|
<div class="">
|
||||||
<div class="stat-title">IP</div>
|
<div class="">IP</div>
|
||||||
<div class="stat-value">{service.ip}</div>
|
<div class="">{service.ip}</div>
|
||||||
<div class="stat-desc"></div>
|
<div class=""></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="join join-vertical w-full px-0">
|
<div class=" w-full px-0">
|
||||||
<div class="collapse join-item collapse-arrow">
|
<div class=" ">
|
||||||
<input type="radio" name="my-accordion-4" />
|
<input type="radio" name="my-accordion-4" />
|
||||||
<div class="collapse-title text-xl font-medium">
|
<div class=" text-xl font-medium">Details</div>
|
||||||
Details
|
<div class="">
|
||||||
</div>
|
|
||||||
<div class="collapse-content">
|
|
||||||
<p>
|
<p>
|
||||||
<span class="font-bold">Interface</span>
|
<span class="font-bold">Interface</span>
|
||||||
{service.interface}
|
{service.interface}
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ interface AvatarProps {
|
|||||||
export const MachineAvatar = (props: AvatarProps) => {
|
export const MachineAvatar = (props: AvatarProps) => {
|
||||||
return (
|
return (
|
||||||
<figure>
|
<figure>
|
||||||
<div class="avatar placeholder">
|
<div class="">
|
||||||
<div
|
<div
|
||||||
class={cx(
|
class={cx(
|
||||||
"rounded-lg border p-2 bg-def-1 border-def-3 size-36",
|
"rounded-lg border p-2 bg-def-1 border-def-3 size-36",
|
||||||
|
|||||||
@@ -130,12 +130,10 @@ export function CreateMachine() {
|
|||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
</Field>
|
</Field>
|
||||||
<div class="collapse collapse-arrow" tabindex="0">
|
<div class=" " tabindex="0">
|
||||||
<input type="checkbox" />
|
<input type="checkbox" />
|
||||||
<div class="collapse-title link font-medium ">
|
<div class=" font-medium ">Deployment Settings</div>
|
||||||
Deployment Settings
|
<div class="">
|
||||||
</div>
|
|
||||||
<div class="collapse-content">
|
|
||||||
<Field name="opts.machine.deploy.targetHost">
|
<Field name="opts.machine.deploy.targetHost">
|
||||||
{(field, props) => (
|
{(field, props) => (
|
||||||
<>
|
<>
|
||||||
|
|||||||
@@ -555,12 +555,10 @@ const MachineForm = (props: MachineDetailsProps) => {
|
|||||||
)}
|
)}
|
||||||
</Field>
|
</Field>
|
||||||
|
|
||||||
<div class="collapse collapse-arrow col-span-full" tabindex="0">
|
<div class=" col-span-full" tabindex="0">
|
||||||
<input type="checkbox" />
|
<input type="checkbox" />
|
||||||
<div class="collapse-title link px-0 text-xl ">
|
<div class=" px-0 text-xl ">Connection Settings</div>
|
||||||
Connection Settings
|
<div class="">
|
||||||
</div>
|
|
||||||
<div class="collapse-content">
|
|
||||||
<Field name="machine.deploy.targetHost">
|
<Field name="machine.deploy.targetHost">
|
||||||
{(field, props) => (
|
{(field, props) => (
|
||||||
<TextInput
|
<TextInput
|
||||||
@@ -577,7 +575,7 @@ const MachineForm = (props: MachineDetailsProps) => {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
{
|
{
|
||||||
<div class="card-actions col-span-full justify-end">
|
<div class=" col-span-full justify-end">
|
||||||
<Button
|
<Button
|
||||||
type="submit"
|
type="submit"
|
||||||
disabled={formStore.submitting || !formStore.dirty}
|
disabled={formStore.submitting || !formStore.dirty}
|
||||||
@@ -589,16 +587,16 @@ const MachineForm = (props: MachineDetailsProps) => {
|
|||||||
</Form>
|
</Form>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="card-body">
|
<div class="">
|
||||||
<div class="divider"></div>
|
<div class=""></div>
|
||||||
|
|
||||||
<span class="text-xl text-primary-800">Actions</span>
|
<span class="text-xl text-primary-800">Actions</span>
|
||||||
<div class="my-4 flex flex-col gap-6">
|
<div class="my-4 flex flex-col gap-6">
|
||||||
<span class="max-w-md text-neutral">
|
<span class="max-w-md">
|
||||||
Installs the system for the first time. Used to bootstrap the remote
|
Installs the system for the first time. Used to bootstrap the remote
|
||||||
device.
|
device.
|
||||||
</span>
|
</span>
|
||||||
<div class="tooltip w-fit" data-tip="Machine must be online">
|
<div class=" w-fit" data-tip="Machine must be online">
|
||||||
<Button
|
<Button
|
||||||
class="w-full"
|
class="w-full"
|
||||||
// disabled={!online()}
|
// disabled={!online()}
|
||||||
@@ -624,11 +622,11 @@ const MachineForm = (props: MachineDetailsProps) => {
|
|||||||
/>
|
/>
|
||||||
</Modal>
|
</Modal>
|
||||||
|
|
||||||
<span class="max-w-md text-neutral">
|
<span class="max-w-md">
|
||||||
Update the system if changes should be synced after the installation
|
Update the system if changes should be synced after the installation
|
||||||
process.
|
process.
|
||||||
</span>
|
</span>
|
||||||
<div class="tooltip w-fit" data-tip="Machine must be online">
|
<div class=" w-fit" data-tip="Machine must be online">
|
||||||
<Button
|
<Button
|
||||||
class="w-full"
|
class="w-full"
|
||||||
// disabled={!online()}
|
// disabled={!online()}
|
||||||
@@ -669,10 +667,7 @@ export const MachineDetails = () => {
|
|||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Header title={`${params.id} machine`} showBack />
|
<Header title={`${params.id} machine`} showBack />
|
||||||
<Show
|
<Show when={genericQuery.data} fallback={<span class=""></span>}>
|
||||||
when={genericQuery.data}
|
|
||||||
fallback={<span class="loading loading-lg"></span>}
|
|
||||||
>
|
|
||||||
{(data) => (
|
{(data) => (
|
||||||
<>
|
<>
|
||||||
<MachineForm initialData={data()} />
|
<MachineForm initialData={data()} />
|
||||||
|
|||||||
@@ -76,7 +76,7 @@ export const MachineListView: Component = () => {
|
|||||||
title="Your Machines"
|
title="Your Machines"
|
||||||
toolbar={
|
toolbar={
|
||||||
<>
|
<>
|
||||||
<span class="tooltip tooltip-bottom" data-tip="Reload">
|
<span class="" data-tip="Reload">
|
||||||
<Button
|
<Button
|
||||||
variant="light"
|
variant="light"
|
||||||
size="s"
|
size="s"
|
||||||
@@ -86,7 +86,7 @@ export const MachineListView: Component = () => {
|
|||||||
</span>
|
</span>
|
||||||
|
|
||||||
<div class="border border-def-3">
|
<div class="border border-def-3">
|
||||||
<span class="tooltip tooltip-bottom" data-tip="List View">
|
<span class="" data-tip="List View">
|
||||||
<Button
|
<Button
|
||||||
onclick={() => setView("list")}
|
onclick={() => setView("list")}
|
||||||
variant={view() == "list" ? "dark" : "light"}
|
variant={view() == "list" ? "dark" : "light"}
|
||||||
@@ -94,7 +94,7 @@ export const MachineListView: Component = () => {
|
|||||||
startIcon={<Icon icon="List" />}
|
startIcon={<Icon icon="List" />}
|
||||||
></Button>
|
></Button>
|
||||||
</span>
|
</span>
|
||||||
<span class="tooltip tooltip-bottom" data-tip="Grid View">
|
<span class="" data-tip="Grid View">
|
||||||
<Button
|
<Button
|
||||||
onclick={() => setView("grid")}
|
onclick={() => setView("grid")}
|
||||||
variant={view() == "grid" ? "dark" : "light"}
|
variant={view() == "grid" ? "dark" : "light"}
|
||||||
@@ -103,7 +103,7 @@ export const MachineListView: Component = () => {
|
|||||||
></Button>
|
></Button>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<span class="tooltip tooltip-bottom" data-tip="New Machine">
|
<span class="" data-tip="New Machine">
|
||||||
<Button
|
<Button
|
||||||
onClick={() => navigate("create")}
|
onClick={() => navigate("create")}
|
||||||
size="s"
|
size="s"
|
||||||
@@ -146,15 +146,15 @@ export const MachineListView: Component = () => {
|
|||||||
<Match when={inventoryQuery.isLoading}>
|
<Match when={inventoryQuery.isLoading}>
|
||||||
{/* Loading skeleton */}
|
{/* Loading skeleton */}
|
||||||
<div>
|
<div>
|
||||||
<div class="card card-side m-2 bg-base-100 shadow-lg">
|
<div class=" m-2 shadow-lg">
|
||||||
<figure class="pl-2">
|
<figure class="pl-2">
|
||||||
<div class="skeleton size-12"></div>
|
<div class=" size-12"></div>
|
||||||
</figure>
|
</figure>
|
||||||
<div class="card-body">
|
<div class="">
|
||||||
<h2 class="card-title">
|
<h2 class="">
|
||||||
<div class="skeleton h-12 w-80"></div>
|
<div class=" h-12 w-80"></div>
|
||||||
</h2>
|
</h2>
|
||||||
<div class="skeleton h-8 w-72"></div>
|
<div class=" h-8 w-72"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -163,7 +163,7 @@ export const MachineListView: Component = () => {
|
|||||||
when={!inventoryQuery.isLoading && inventoryMachines().length === 0}
|
when={!inventoryQuery.isLoading && inventoryMachines().length === 0}
|
||||||
>
|
>
|
||||||
<div class="mt-8 flex w-full flex-col items-center justify-center gap-2">
|
<div class="mt-8 flex w-full flex-col items-center justify-center gap-2">
|
||||||
<span class="text-lg text-neutral">
|
<span class="text-lg">
|
||||||
No machines defined yet. Click below to define one.
|
No machines defined yet. Click below to define one.
|
||||||
</span>
|
</span>
|
||||||
<Button
|
<Button
|
||||||
|
|||||||
@@ -86,17 +86,15 @@ const Details = (props: DetailsProps) => {
|
|||||||
return (
|
return (
|
||||||
<div class="flex w-full flex-col gap-2">
|
<div class="flex w-full flex-col gap-2">
|
||||||
<article class="prose">{props.data.description}</article>
|
<article class="prose">{props.data.description}</article>
|
||||||
<span class="label-text">Categories</span>
|
<span class="">Categories</span>
|
||||||
<div>
|
<div>
|
||||||
<For each={props.data.categories}>
|
<For each={props.data.categories}>
|
||||||
{(c) => <div class="badge badge-primary m-1">{c}</div>}
|
{(c) => <div class=" m-1">{c}</div>}
|
||||||
</For>
|
</For>
|
||||||
</div>
|
</div>
|
||||||
<span class="label-text">Roles</span>
|
<span class="">Roles</span>
|
||||||
<div>
|
<div>
|
||||||
<For each={props.data.roles}>
|
<For each={props.data.roles}>{(r) => <div class=" m-1">{r}</div>}</For>
|
||||||
{(r) => <div class="badge badge-secondary m-1">{r}</div>}
|
|
||||||
</For>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="p-2">
|
<div class="p-2">
|
||||||
<SolidMarkdown>{props.data.readme}</SolidMarkdown>
|
<SolidMarkdown>{props.data.readme}</SolidMarkdown>
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ const Categories = (props: CategoryProps) => {
|
|||||||
return (
|
return (
|
||||||
<span class="ml-6 inline-flex h-full align-middle">
|
<span class="ml-6 inline-flex h-full align-middle">
|
||||||
{props.categories.map((category) => (
|
{props.categories.map((category) => (
|
||||||
<span class="badge badge-secondary">{category}</span>
|
<span class="">{category}</span>
|
||||||
))}
|
))}
|
||||||
</span>
|
</span>
|
||||||
);
|
);
|
||||||
@@ -39,7 +39,7 @@ const Roles = (props: RolesProps) => {
|
|||||||
</Typography>
|
</Typography>
|
||||||
</span>
|
</span>
|
||||||
{props.roles.map((role) => (
|
{props.roles.map((role) => (
|
||||||
<span class="badge badge-ghost">{role}</span>
|
<span class="">{role}</span>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
@@ -54,11 +54,11 @@ const ModuleItem = (props: {
|
|||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div class={cx("stat rounded-lg shadow-md", props.class)}>
|
<div class={cx("rounded-lg shadow-md", props.class)}>
|
||||||
<div class="stat-figure text-primary-800">
|
<div class="text-primary-800">
|
||||||
<div class="join">
|
<div class="">
|
||||||
<Menu popoverid={`menu-${props.name}`} label={<Icon icon={"More"} />}>
|
<Menu popoverid={`menu-${props.name}`} label={<Icon icon={"More"} />}>
|
||||||
<ul class="menu z-[1] w-52 rounded-box bg-base-100 p-2 shadow">
|
<ul class="z-[1] w-52 p-2 shadow">
|
||||||
<li>
|
<li>
|
||||||
<a
|
<a
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
@@ -74,7 +74,7 @@ const ModuleItem = (props: {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<A href={`/modules/details/${name}`}>
|
<A href={`/modules/details/${name}`}>
|
||||||
<div class="stat-value underline">
|
<div class="underline">
|
||||||
{name}
|
{name}
|
||||||
<Categories categories={info.categories} />
|
<Categories categories={info.categories} />
|
||||||
</div>
|
</div>
|
||||||
@@ -113,7 +113,7 @@ export const ModuleList = () => {
|
|||||||
title="Modules"
|
title="Modules"
|
||||||
toolbar={
|
toolbar={
|
||||||
<>
|
<>
|
||||||
<span class="tooltip tooltip-bottom" data-tip="Reload">
|
<span class="" data-tip="Reload">
|
||||||
<Button
|
<Button
|
||||||
variant="light"
|
variant="light"
|
||||||
size="s"
|
size="s"
|
||||||
@@ -123,7 +123,7 @@ export const ModuleList = () => {
|
|||||||
</span>
|
</span>
|
||||||
|
|
||||||
<div class="border border-def-3">
|
<div class="border border-def-3">
|
||||||
<span class="tooltip tooltip-bottom" data-tip="List View">
|
<span class="" data-tip="List View">
|
||||||
<Button
|
<Button
|
||||||
onclick={() => setView("list")}
|
onclick={() => setView("list")}
|
||||||
variant={view() == "list" ? "dark" : "light"}
|
variant={view() == "list" ? "dark" : "light"}
|
||||||
@@ -131,7 +131,7 @@ export const ModuleList = () => {
|
|||||||
startIcon={<Icon icon="List" />}
|
startIcon={<Icon icon="List" />}
|
||||||
></Button>
|
></Button>
|
||||||
</span>
|
</span>
|
||||||
<span class="tooltip tooltip-bottom" data-tip="Grid View">
|
<span class="" data-tip="Grid View">
|
||||||
<Button
|
<Button
|
||||||
onclick={() => setView("grid")}
|
onclick={() => setView("grid")}
|
||||||
variant={view() == "grid" ? "dark" : "light"}
|
variant={view() == "grid" ? "dark" : "light"}
|
||||||
@@ -140,7 +140,7 @@ export const ModuleList = () => {
|
|||||||
></Button>
|
></Button>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<span class="tooltip tooltip-bottom" data-tip="New Machine">
|
<span class="" data-tip="New Machine">
|
||||||
<Button
|
<Button
|
||||||
size="s"
|
size="s"
|
||||||
variant="light"
|
variant="light"
|
||||||
|
|||||||
@@ -6,8 +6,8 @@ import { useNavigate } from "@solidjs/router";
|
|||||||
export const Welcome = () => {
|
export const Welcome = () => {
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
return (
|
return (
|
||||||
<div class="hero min-h-[calc(100vh-10rem)]">
|
<div class="min-h-[calc(100vh-10rem)]">
|
||||||
<div class="hero-content mb-32 text-center">
|
<div class="mb-32 text-center">
|
||||||
<div class="max-w-md">
|
<div class="max-w-md">
|
||||||
<h1 class="text-5xl font-bold">Welcome to Clan</h1>
|
<h1 class="text-5xl font-bold">Welcome to Clan</h1>
|
||||||
<p class="py-6">Own the services you use.</p>
|
<p class="py-6">Own the services you use.</p>
|
||||||
@@ -17,7 +17,7 @@ export const Welcome = () => {
|
|||||||
</Button>
|
</Button>
|
||||||
<Button
|
<Button
|
||||||
variant="light"
|
variant="light"
|
||||||
class="!link w-full text-right !text-primary-800"
|
class="w-full text-right !text-primary-800"
|
||||||
onClick={async () => {
|
onClick={async () => {
|
||||||
const uri = await registerClan();
|
const uri = await registerClan();
|
||||||
if (uri) {
|
if (uri) {
|
||||||
|
|||||||
@@ -1,31 +1,11 @@
|
|||||||
import typography from "@tailwindcss/typography";
|
import typography from "@tailwindcss/typography";
|
||||||
import daisyui from "daisyui";
|
|
||||||
import core from "./tailwind/core-plugin";
|
import core from "./tailwind/core-plugin";
|
||||||
// @ts-expect-error: Doesn't have types
|
|
||||||
import { parseColor } from "tailwindcss/lib/util/color";
|
|
||||||
|
|
||||||
/** @type {import('tailwindcss').Config} */
|
/** @type {import('tailwindcss').Config} */
|
||||||
const config = {
|
const config = {
|
||||||
content: ["./src/**/*.{js,jsx,ts,tsx}"],
|
content: ["./src/**/*.{js,jsx,ts,tsx}"],
|
||||||
theme: {},
|
theme: {},
|
||||||
daisyui: {
|
plugins: [typography, core],
|
||||||
themes: [
|
|
||||||
{
|
|
||||||
light_clan: {
|
|
||||||
primary: "#29b1eb",
|
|
||||||
secondary: "#4d6a6b",
|
|
||||||
accent: "#37cdbe",
|
|
||||||
neutral: "#3d4451",
|
|
||||||
error: "#ff2c78",
|
|
||||||
success: "#0ae856",
|
|
||||||
warning: "#ffdd2c",
|
|
||||||
"base-100": "#F7F9FA",
|
|
||||||
"base-content": "#0D1416",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
plugins: [typography, core, daisyui],
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export default config;
|
export default config;
|
||||||
|
|||||||
Reference in New Issue
Block a user