use iconify icons

This commit is contained in:
chark1es 2025-02-17 15:15:01 -08:00
parent e72b8aca07
commit e51dd3d6f8
7 changed files with 59 additions and 79 deletions

View file

@ -8,6 +8,7 @@
"@astrojs/react": "^4.2.0", "@astrojs/react": "^4.2.0",
"@astrojs/tailwind": "5.1.4", "@astrojs/tailwind": "5.1.4",
"@iconify-json/heroicons": "^1.2.2", "@iconify-json/heroicons": "^1.2.2",
"@iconify/react": "^5.2.0",
"@types/highlight.js": "^10.1.0", "@types/highlight.js": "^10.1.0",
"@types/js-yaml": "^4.0.9", "@types/js-yaml": "^4.0.9",
"@types/react": "^19.0.8", "@types/react": "^19.0.8",
@ -165,6 +166,8 @@
"@iconify-json/heroicons": ["@iconify-json/heroicons@1.2.2", "", { "dependencies": { "@iconify/types": "*" } }, "sha512-qoW4pXr5kTTL6juEjgTs83OJIwpePu7q1tdtKVEdj+i0zyyVHgg/dd9grsXJQnpTpBt6/VwNjrXBvFjRsKPENg=="], "@iconify-json/heroicons": ["@iconify-json/heroicons@1.2.2", "", { "dependencies": { "@iconify/types": "*" } }, "sha512-qoW4pXr5kTTL6juEjgTs83OJIwpePu7q1tdtKVEdj+i0zyyVHgg/dd9grsXJQnpTpBt6/VwNjrXBvFjRsKPENg=="],
"@iconify/react": ["@iconify/react@5.2.0", "", { "dependencies": { "@iconify/types": "^2.0.0" }, "peerDependencies": { "react": ">=16" } }, "sha512-7Sdjrqq3fkkQNks9SY3adGC37NQTHsBJL2PRKlQd455PoDi9s+Es9AUTY+vGLFOYs5yO9w9yCE42pmxCwG26WA=="],
"@iconify/tools": ["@iconify/tools@4.0.7", "", { "dependencies": { "@iconify/types": "^2.0.0", "@iconify/utils": "^2.1.32", "@types/tar": "^6.1.13", "axios": "^1.7.7", "cheerio": "1.0.0", "domhandler": "^5.0.3", "extract-zip": "^2.0.1", "local-pkg": "^0.5.0", "pathe": "^1.1.2", "svgo": "^3.3.2", "tar": "^6.2.1" } }, "sha512-zOJxKIfZn96ZRGGvIWzDRLD9vb2CsxjcLuM+QIdvwWbv6SWhm49gECzUnd4d2P0sq9sfodT7yCNobWK8nvavxQ=="], "@iconify/tools": ["@iconify/tools@4.0.7", "", { "dependencies": { "@iconify/types": "^2.0.0", "@iconify/utils": "^2.1.32", "@types/tar": "^6.1.13", "axios": "^1.7.7", "cheerio": "1.0.0", "domhandler": "^5.0.3", "extract-zip": "^2.0.1", "local-pkg": "^0.5.0", "pathe": "^1.1.2", "svgo": "^3.3.2", "tar": "^6.2.1" } }, "sha512-zOJxKIfZn96ZRGGvIWzDRLD9vb2CsxjcLuM+QIdvwWbv6SWhm49gECzUnd4d2P0sq9sfodT7yCNobWK8nvavxQ=="],
"@iconify/types": ["@iconify/types@2.0.0", "", {}, "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg=="], "@iconify/types": ["@iconify/types@2.0.0", "", {}, "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg=="],

View file

@ -15,6 +15,7 @@
"@astrojs/react": "^4.2.0", "@astrojs/react": "^4.2.0",
"@astrojs/tailwind": "5.1.4", "@astrojs/tailwind": "5.1.4",
"@iconify-json/heroicons": "^1.2.2", "@iconify-json/heroicons": "^1.2.2",
"@iconify/react": "^5.2.0",
"@types/highlight.js": "^10.1.0", "@types/highlight.js": "^10.1.0",
"@types/js-yaml": "^4.0.9", "@types/js-yaml": "^4.0.9",
"@types/react": "^19.0.8", "@types/react": "^19.0.8",

View file

@ -3,6 +3,7 @@ import { Get } from "../../../scripts/pocketbase/Get";
import { Authentication } from "../../../scripts/pocketbase/Authentication"; import { Authentication } from "../../../scripts/pocketbase/Authentication";
import { Update } from "../../../scripts/pocketbase/Update"; import { Update } from "../../../scripts/pocketbase/Update";
import { SendLog } from "../../../scripts/pocketbase/SendLog"; import { SendLog } from "../../../scripts/pocketbase/SendLog";
import { Icon } from "@iconify/react";
interface Event { interface Event {
id: string; id: string;
@ -65,12 +66,12 @@ const createToast = (
toast.innerHTML = ` toast.innerHTML = `
<div class="alert ${alertClass} shadow-lg min-w-[300px]"> <div class="alert ${alertClass} shadow-lg min-w-[300px]">
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
${type === "success" <span class="iconify w-6 h-6" data-icon="${type === "success"
? '<svg xmlns="http://www.w3.org/2000/svg" class="stroke-current shrink-0 h-6 w-6" fill="none" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z" /></svg>' ? "mdi:check-circle-outline"
: type === "error" : type === "error"
? '<svg xmlns="http://www.w3.org/2000/svg" class="stroke-current shrink-0 h-6 w-6" fill="none" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z" /></svg>' ? "mdi:alert-circle-outline"
: '<svg xmlns="http://www.w3.org/2000/svg" class="stroke-current shrink-0 h-6 w-6" fill="none" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"/></svg>' : "mdi:alert-outline"
} }"></span>
<span>${message}</span> <span>${message}</span>
</div> </div>
</div> </div>

View file

@ -2,6 +2,7 @@ import { useEffect, useState, useMemo, useCallback } from 'react';
import { Get } from '../../../scripts/pocketbase/Get'; import { Get } from '../../../scripts/pocketbase/Get';
import { Authentication } from '../../../scripts/pocketbase/Authentication'; import { Authentication } from '../../../scripts/pocketbase/Authentication';
import { SendLog } from '../../../scripts/pocketbase/SendLog'; import { SendLog } from '../../../scripts/pocketbase/SendLog';
import { Icon } from "@iconify/react";
// Cache for storing user data // Cache for storing user data
const userCache = new Map<string, { const userCache = new Map<string, {
@ -378,9 +379,7 @@ export default function Attendees() {
if (error) { if (error) {
return ( return (
<div className="alert alert-error"> <div className="alert alert-error">
<svg xmlns="http://www.w3.org/2000/svg" className="stroke-current shrink-0 h-6 w-6" fill="none" viewBox="0 0 24 24"> <Icon icon="heroicons:exclamation-circle" className="h-6 w-6" />
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth="2" d="M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z" />
</svg>
<span>{error}</span> <span>{error}</span>
</div> </div>
); );
@ -393,9 +392,7 @@ export default function Attendees() {
if (!attendeesList || attendeesList.length === 0) { if (!attendeesList || attendeesList.length === 0) {
return ( return (
<div className="text-center py-8 text-base-content/70"> <div className="text-center py-8 text-base-content/70">
<svg xmlns="http://www.w3.org/2000/svg" className="h-12 w-12 mx-auto mb-4 opacity-50" viewBox="0 0 20 20" fill="currentColor"> <Icon icon="heroicons:user-group" className="h-12 w-12 mx-auto mb-4 opacity-50" />
<path d="M13 6a3 3 0 11-6 0 3 3 0 016 0zM18 8a2 2 0 11-4 0 2 2 0 014 0zM14 15a4 4 0 00-8 0v3h8v-3zM6 8a2 2 0 11-4 0 2 2 0 014 0zM16 18v-3a5.972 5.972 0 00-.75-2.906A3.005 3.005 0 0119 15v3h-3zM4.75 12.094A5.973 5.973 0 004 15v3H1v-3a3 3 0 013.75-2.906z" />
</svg>
<p>No attendees yet</p> <p>No attendees yet</p>
</div> </div>
); );
@ -409,9 +406,7 @@ export default function Attendees() {
<div className="flex-1 flex gap-2"> <div className="flex-1 flex gap-2">
<div className="join flex-1"> <div className="join flex-1">
<div className="join-item bg-base-200 flex items-center px-3"> <div className="join-item bg-base-200 flex items-center px-3">
<svg xmlns="http://www.w3.org/2000/svg" className="h-5 w-5 opacity-70" viewBox="0 0 20 20" fill="currentColor"> <Icon icon="heroicons:magnifying-glass" className="h-5 w-5 opacity-70" />
<path fillRule="evenodd" d="M8 4a4 4 0 100 8 4 4 0 000-8zM2 8a6 6 0 1110.89 3.476l4.817 4.817a1 1 0 01-1.414 1.414l-4.816-4.816A6 6 0 012 8z" clipRule="evenodd" />
</svg>
</div> </div>
<input <input
type="text" type="text"
@ -426,9 +421,7 @@ export default function Attendees() {
className="btn btn-primary btn-sm gap-2" className="btn btn-primary btn-sm gap-2"
onClick={downloadAttendeesCSV} onClick={downloadAttendeesCSV}
> >
<svg xmlns="http://www.w3.org/2000/svg" className="h-4 w-4" viewBox="0 0 20 20" fill="currentColor"> <Icon icon="heroicons:arrow-down-tray" className="h-4 w-4" />
<path fillRule="evenodd" d="M3 17a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1zm3.293-7.707a1 1 0 011.414 0L9 10.586V3a1 1 0 112 0v7.586l1.293-1.293a1 1 0 111.414 1.414l-3 3a1 1 0 01-1.414 0l-3-3a1 1 0 010-1.414z" clipRule="evenodd" />
</svg>
Download CSV Download CSV
</button> </button>
</div> </div>

View file

@ -1,4 +1,5 @@
import React, { useState, useEffect, useCallback, useMemo, memo } from "react"; import React, { useState, useEffect, useCallback, useMemo, memo } from "react";
import { Icon } from "@iconify/react";
import { Get } from "../../../scripts/pocketbase/Get"; import { Get } from "../../../scripts/pocketbase/Get";
import { Authentication } from "../../../scripts/pocketbase/Authentication"; import { Authentication } from "../../../scripts/pocketbase/Authentication";
import { Update } from "../../../scripts/pocketbase/Update"; import { Update } from "../../../scripts/pocketbase/Update";
@ -239,9 +240,7 @@ const EventForm = memo(({
setSelectedFiles(updatedFiles); setSelectedFiles(updatedFiles);
}} }}
> >
<svg xmlns="http://www.w3.org/2000/svg" className="h-4 w-4" viewBox="0 0 20 20" fill="currentColor"> <Icon icon="heroicons:x-circle" className="h-4 w-4" />
<path fillRule="evenodd" d="M9 2a1 1 0 00-.894.553L7.382 4H4a1 1 0 000 2v10a2 2 0 002 2h8a2 2 0 002-2V6a1 1 0 100-2h-3.382l-.724-1.447A1 1 0 0011 2H9zM7 8a1 1 0 012 0v6a1 1 0 11-2 0V8zm5-1a1 1 0 00-1 1v6a1 1 0 102 0V8a1 1 0 00-1-1z" clipRule="evenodd" />
</svg>
</button> </button>
</div> </div>
</div> </div>
@ -267,10 +266,7 @@ const EventForm = memo(({
} }
}} }}
> >
<svg xmlns="http://www.w3.org/2000/svg" className="h-4 w-4" viewBox="0 0 20 20" fill="currentColor"> <Icon icon="heroicons:eye" className="h-4 w-4" />
<path d="M10 12a2 2 0 100-4 2 2 0 000 4z" />
<path fillRule="evenodd" d="M.458 10C1.732 5.943 5.522 3 10 3s8.268 2.943 9.542 7c-1.274 4.057-5.064 7-9.542 7S1.732 14.057.458 10zM14 10a4 4 0 11-8 0 4 4 0 018 0z" clipRule="evenodd" />
</svg>
</button> </button>
<div className="text-error"> <div className="text-error">
{filesToDelete.has(filename) ? ( {filesToDelete.has(filename) ? (
@ -283,7 +279,7 @@ const EventForm = memo(({
setFilesToDelete(newFilesToDelete); setFilesToDelete(newFilesToDelete);
}} }}
> >
Undo <Icon icon="heroicons:trash" className="h-4 w-4" />
</button> </button>
) : ( ) : (
<button <button
@ -295,9 +291,7 @@ const EventForm = memo(({
setFilesToDelete(newFilesToDelete); setFilesToDelete(newFilesToDelete);
}} }}
> >
<svg xmlns="http://www.w3.org/2000/svg" className="h-4 w-4" viewBox="0 0 20 20" fill="currentColor"> <Icon icon="heroicons:trash" className="h-4 w-4" />
<path fillRule="evenodd" d="M9 2a1 1 0 00-.894.553L7.382 4H4a1 1 0 000 2v10a2 2 0 002 2h8a2 2 0 002-2V6a1 1 0 100-2h-3.382l-.724-1.447A1 1 0 0011 2H9zM7 8a1 1 0 012 0v6a1 1 0 11-2 0V8zm5-1a1 1 0 00-1 1v6a1 1 0 102 0V8a1 1 0 00-1-1z" clipRule="evenodd" />
</svg>
</button> </button>
)} )}
</div> </div>
@ -510,9 +504,7 @@ const LoadingSpinner = memo(() => (
const ErrorDisplay = memo(({ error, onRetry }: { error: string; onRetry: () => void }) => ( const ErrorDisplay = memo(({ error, onRetry }: { error: string; onRetry: () => void }) => (
<div className="flex flex-col items-center justify-center p-8 space-y-4"> <div className="flex flex-col items-center justify-center p-8 space-y-4">
<div className="text-error"> <div className="text-error">
<svg xmlns="http://www.w3.org/2000/svg" className="h-12 w-12" viewBox="0 0 20 20" fill="currentColor"> <Icon icon="heroicons:x-circle" className="h-12 w-12" />
<path fillRule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z" clipRule="evenodd" />
</svg>
</div> </div>
<p className="text-error font-medium">{error}</p> <p className="text-error font-medium">{error}</p>
<button className="btn btn-error btn-sm" onClick={onRetry}> <button className="btn btn-error btn-sm" onClick={onRetry}>
@ -762,11 +754,10 @@ export default function EventEditor({ onEventSaved }: EventEditorProps) {
if (submitButton) { if (submitButton) {
submitButton.classList.remove("btn-disabled"); submitButton.classList.remove("btn-disabled");
submitButton.classList.add("btn-success"); submitButton.classList.add("btn-success");
submitButton.innerHTML = ` const successIcon = document.createElement('span');
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" viewBox="0 0 20 20" fill="currentColor"> successIcon.innerHTML = '<i class="iconify" data-icon="heroicons:check" style="width: 20px; height: 20px;"></i>';
<path fill-rule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clip-rule="evenodd"/> submitButton.textContent = '';
</svg> submitButton.appendChild(successIcon);
`;
} }
// Reset all state // Reset all state
@ -809,11 +800,10 @@ export default function EventEditor({ onEventSaved }: EventEditorProps) {
if (submitButton) { if (submitButton) {
submitButton.classList.remove("btn-disabled"); submitButton.classList.remove("btn-disabled");
submitButton.classList.add("btn-error"); submitButton.classList.add("btn-error");
submitButton.innerHTML = ` const errorIcon = document.createElement('span');
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" viewBox="0 0 20 20" fill="currentColor"> errorIcon.innerHTML = '<i class="iconify" data-icon="heroicons:x-circle" style="width: 20px; height: 20px;"></i>';
<path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z" clip-rule="evenodd"/> submitButton.textContent = '';
</svg> submitButton.appendChild(errorIcon);
`;
} }
alert(error.message || "Failed to save event. Please try again."); alert(error.message || "Failed to save event. Please try again.");
} finally { } finally {
@ -821,7 +811,7 @@ export default function EventEditor({ onEventSaved }: EventEditorProps) {
if (submitButton) { if (submitButton) {
submitButton.disabled = false; submitButton.disabled = false;
submitButton.classList.remove("btn-disabled", "btn-success", "btn-error"); submitButton.classList.remove("btn-disabled", "btn-success", "btn-error");
submitButton.innerHTML = 'Save Changes'; submitButton.textContent = 'Save Changes';
} }
if (cancelButton) cancelButton.disabled = false; if (cancelButton) cancelButton.disabled = false;
window.hideLoading?.(); window.hideLoading?.();

View file

@ -1,4 +1,5 @@
import React, { useEffect, useState, useCallback, useMemo } from 'react'; import React, { useEffect, useState, useCallback, useMemo } from 'react';
import { Icon } from "@iconify/react";
import hljs from 'highlight.js'; import hljs from 'highlight.js';
import 'highlight.js/styles/github-dark.css'; import 'highlight.js/styles/github-dark.css';
@ -312,9 +313,7 @@ export default function FilePreview({ url: initialUrl = '', filename: initialFil
onClick={handleDownload} onClick={handleDownload}
className="btn btn-sm btn-ghost gap-2 whitespace-nowrap" className="btn btn-sm btn-ghost gap-2 whitespace-nowrap"
> >
<svg xmlns="http://www.w3.org/2000/svg" className="h-4 w-4" viewBox="0 0 20 20" fill="currentColor"> <Icon icon="mdi:download" className="h-4 w-4" />
<path fillRule="evenodd" d="M3 17a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1zm3.293-7.707a1 1 0 011.414 0L9 10.586V3a1 1 0 112 0v7.586l1.293-1.293a1 1 0 111.414 1.414l-3 3a1 1 0 01-1.414 0l-3-3a1 1 0 010-1.414z" clipRule="evenodd" />
</svg>
Download Download
</button> </button>
</div> </div>
@ -342,9 +341,7 @@ export default function FilePreview({ url: initialUrl = '', filename: initialFil
onClick={handleDownload} onClick={handleDownload}
className="btn btn-sm btn-ghost gap-2 whitespace-nowrap" className="btn btn-sm btn-ghost gap-2 whitespace-nowrap"
> >
<svg xmlns="http://www.w3.org/2000/svg" className="h-4 w-4" viewBox="0 0 20 20" fill="currentColor"> <Icon icon="mdi:download" className="h-4 w-4" />
<path fillRule="evenodd" d="M3 17a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1zm3.293-7.707a1 1 0 011.414 0L9 10.586V3a1 1 0 112 0v7.586l1.293-1.293a1 1 0 111.414 1.414l-3 3a1 1 0 01-1.414 0l-3-3a1 1 0 010-1.414z" clipRule="evenodd" />
</svg>
Download Download
</button> </button>
</div> </div>
@ -375,9 +372,7 @@ export default function FilePreview({ url: initialUrl = '', filename: initialFil
onClick={handleDownload} onClick={handleDownload}
className="btn btn-sm btn-ghost gap-2 whitespace-nowrap" className="btn btn-sm btn-ghost gap-2 whitespace-nowrap"
> >
<svg xmlns="http://www.w3.org/2000/svg" className="h-4 w-4" viewBox="0 0 20 20" fill="currentColor"> <Icon icon="mdi:download" className="h-4 w-4" />
<path fillRule="evenodd" d="M3 17a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1zm3.293-7.707a1 1 0 011.414 0L9 10.586V3a1 1 0 112 0v7.586l1.293-1.293a1 1 0 111.414 1.414l-3 3a1 1 0 01-1.414 0l-3-3a1 1 0 010-1.414z" clipRule="evenodd" />
</svg>
Download Download
</button> </button>
</div> </div>
@ -422,9 +417,7 @@ export default function FilePreview({ url: initialUrl = '', filename: initialFil
onClick={handleDownload} onClick={handleDownload}
className="btn btn-sm btn-ghost gap-2 whitespace-nowrap" className="btn btn-sm btn-ghost gap-2 whitespace-nowrap"
> >
<svg xmlns="http://www.w3.org/2000/svg" className="h-4 w-4" viewBox="0 0 20 20" fill="currentColor"> <Icon icon="mdi:download" className="h-4 w-4" />
<path fillRule="evenodd" d="M3 17a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1zm3.293-7.707a1 1 0 011.414 0L9 10.586V3a1 1 0 112 0v7.586l1.293-1.293a1 1 0 111.414 1.414l-3 3a1 1 0 01-1.414 0l-3-3a1 1 0 010-1.414z" clipRule="evenodd" />
</svg>
Download Download
</button> </button>
</div> </div>
@ -451,9 +444,7 @@ export default function FilePreview({ url: initialUrl = '', filename: initialFil
{error && ( {error && (
<div className="flex flex-col items-center justify-center p-8 bg-base-200 rounded-lg text-center space-y-4"> <div className="flex flex-col items-center justify-center p-8 bg-base-200 rounded-lg text-center space-y-4">
<div className="bg-warning/20 p-4 rounded-full"> <div className="bg-warning/20 p-4 rounded-full">
<svg xmlns="http://www.w3.org/2000/svg" className="h-12 w-12 text-warning" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <Icon icon="mdi:alert" className="h-12 w-12 text-warning" />
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth="2" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z" />
</svg>
</div> </div>
<div className="space-y-2"> <div className="space-y-2">
<h3 className="text-lg font-semibold">Preview Unavailable</h3> <h3 className="text-lg font-semibold">Preview Unavailable</h3>
@ -463,9 +454,7 @@ export default function FilePreview({ url: initialUrl = '', filename: initialFil
onClick={handleDownload} onClick={handleDownload}
className="btn btn-warning btn-sm gap-2 mt-4" className="btn btn-warning btn-sm gap-2 mt-4"
> >
<svg xmlns="http://www.w3.org/2000/svg" className="h-4 w-4" viewBox="0 0 20 20" fill="currentColor"> <Icon icon="mdi:download" className="h-4 w-4" />
<path fillRule="evenodd" d="M3 17a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1zm3.293-7.707a1 1 0 011.414 0L9 10.586V3a1 1 0 112 0v7.586l1.293-1.293a1 1 0 111.414 1.414l-3 3a1 1 0 01-1.414 0l-3-3a1 1 0 010-1.414z" clipRule="evenodd" />
</svg>
Download File Instead Download File Instead
</button> </button>
</div> </div>

View file

@ -6,23 +6,26 @@ import InView from "../components/core/InView.astro";
<!doctype html> <!doctype html>
<html lang="en" class="w-full h-full m-0 bg-ieee-black"> <html lang="en" class="w-full h-full m-0 bg-ieee-black">
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<meta name="viewport" content="width=device-width" /> <meta name="viewport" content="width=device-width" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" /> <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<meta name="generator" content={Astro.generator} /> <meta name="generator" content={Astro.generator} />
<title>IEEEUCSD</title> <title>IEEEUCSD</title>
</head> <script
<InView /> src="https://code.iconify.design/iconify-icon/1.0.7/iconify-icon.min.js"
<body class="w-full h-full m-0 bg-ieee-black"> ></script>
<div class="text-white min-h-screen"> </head>
<header class="sticky top-0 w-full z-[999]"> <InView />
<Navbar /> <body class="w-full h-full m-0 bg-ieee-black">
</header> <div class="text-white min-h-screen">
<main class="w-[95%] mx-auto"> <header class="sticky top-0 w-full z-[999]">
<slot /> <Navbar />
</main> </header>
<Footer /> <main class="w-[95%] mx-auto">
</div> <slot />
</body> </main>
<Footer />
</div>
</body>
</html> </html>