- B07_wf4_DesignDetail(8파일+openwebcad) -> B08_DesignDetail로 git mv (이력 보존) - B08_wf5_Quantity -> B07_Quantity (구 수량 백업 zip 보관 폴더) - 파생 문자열 일괄 전환: /b07-cad -> /b08-cad 정적 서빙, CAD 레이어 b07-* -> b08-*, postMessage aislo:b07:* -> aislo:b08:*, 패키지명 aislo-b08-cad, CSS .b08-*, 라우트 키/슬러그(B08_DESIGN_DETAIL/b08-design-detail, B07_QUANTITY/b07-quantity) - 상세설계 워크플로우 stage 4 -> 5 (확정/무효화 전이 3곳), 확정 완료 시 B09로 이동 - WORKFLOW_STEP_ROUTES 순서 재배열: index4=수량(B07), index5=상세설계(B08) - [임시] B08 이동 테스트 버튼 제거, openwebcad dist 재빌드 - 주석 의미 정렬: 수량 인계 주석 B08->B07, 도면 참조 B07->B08 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
192 lines
7.2 KiB
TypeScript
192 lines
7.2 KiB
TypeScript
import type {FC} from 'react';
|
|
import AlignBottomIcon from 'teenyicons/outline/align-bottom.svg?react';
|
|
import AlignCenterHorizontalIcon from 'teenyicons/outline/align-center-horizontal.svg?react';
|
|
import AlignCenterVerticalIcon from 'teenyicons/outline/align-center-vertical.svg?react';
|
|
import AlignLeftIcon from 'teenyicons/outline/align-left.svg?react';
|
|
import AlignRightIcon from 'teenyicons/outline/align-right.svg?react';
|
|
import AlignTextJustifyIcon from 'teenyicons/outline/align-text-justify.svg?react';
|
|
import AlignTopIcon from 'teenyicons/outline/align-top.svg?react';
|
|
import AntiClockwiseIcon from 'teenyicons/outline/anti-clockwise.svg?react';
|
|
import ArrowLeftCircle from 'teenyicons/outline/arrow-left-circle.svg?react';
|
|
import ArrowRightCircle from 'teenyicons/outline/arrow-right-circle.svg?react';
|
|
import CircleIcon from 'teenyicons/outline/circle.svg?react';
|
|
import ClockwiseIcon from 'teenyicons/outline/clockwise.svg?react';
|
|
import CropIcon from 'teenyicons/outline/crop.svg?react';
|
|
import DirectionIcon from 'teenyicons/outline/direction.svg?react';
|
|
import DocumentsIcon from 'teenyicons/outline/documents.svg?react';
|
|
import DownloadIcon from 'teenyicons/outline/download.svg?react';
|
|
import EditIcon from 'teenyicons/outline/edit.svg?react';
|
|
import ExpandIcon from 'teenyicons/outline/expand.svg?react';
|
|
import EyeClosedIcon from 'teenyicons/outline/eye-closed.svg?react';
|
|
import EyeIcon from 'teenyicons/outline/eye.svg?react';
|
|
import FilePlusIcon from 'teenyicons/outline/file-plus.svg?react';
|
|
import FolderPlusIcon from 'teenyicons/outline/folder-plus.svg?react';
|
|
import FolderTickIcon from 'teenyicons/outline/folder-tick.svg?react';
|
|
import FolderXIcon from 'teenyicons/outline/folder-x.svg?react';
|
|
import FolderIcon from 'teenyicons/outline/folder.svg?react';
|
|
import GithubIcon from 'teenyicons/outline/github.svg?react';
|
|
import GridLayoutIcon from 'teenyicons/outline/grid-layout.svg?react';
|
|
import ImageIcon from 'teenyicons/outline/image.svg?react';
|
|
import JavascriptIcon from 'teenyicons/outline/javascript.svg?react';
|
|
import LayersDifferenceIcon from 'teenyicons/outline/layers-difference.svg?react';
|
|
import LineIcon from 'teenyicons/outline/line.svg?react';
|
|
import LockIcon from 'teenyicons/outline/lock.svg?react';
|
|
import PdfIcon from 'teenyicons/outline/pdf.svg?react';
|
|
import PngIcon from 'teenyicons/outline/png.svg?react';
|
|
import SaveIcon from 'teenyicons/outline/save.svg?react';
|
|
import SendDownIcon from 'teenyicons/outline/send-down.svg?react';
|
|
import SendUpIcon from 'teenyicons/outline/send-up.svg?react';
|
|
import SquareIcon from 'teenyicons/outline/square.svg?react';
|
|
import SvgIcon from 'teenyicons/outline/svg.svg?react';
|
|
import UnlockIcon from 'teenyicons/outline/unlock.svg?react';
|
|
import HomeAltIcon from 'teenyicons/outline/home-alt.svg?react';
|
|
|
|
import VectorDocumentIcon from 'teenyicons/outline/vector-document.svg?react';
|
|
import SolidDownSmallIcon from 'teenyicons/solid/down-small.svg?react';
|
|
import SolidDownIcon from 'teenyicons/solid/down.svg?react';
|
|
import ImageSoldIcon from 'teenyicons/solid/image.svg?react';
|
|
import JavascriptSolidIcon from 'teenyicons/solid/javascript.svg?react';
|
|
import PdfSolidIcon from 'teenyicons/solid/pdf.svg?react';
|
|
import SolidUpSmallIcon from 'teenyicons/solid/up-small.svg?react';
|
|
import SolidUpIcon from 'teenyicons/solid/up.svg?react';
|
|
import VectorDocumentSolidIcon from 'teenyicons/solid/vector-document.svg?react';
|
|
import MeasurementIcon from './custom-icons/measurement.svg?react';
|
|
import ScaleIcon from './custom-icons/scale.svg?react'; // https://icon-sets.iconify.design/teenyicons
|
|
|
|
// https://icon-sets.iconify.design/teenyicons
|
|
enum IconName {
|
|
// Outline icons
|
|
Line = 'Line',
|
|
Square = 'Square',
|
|
Circle = 'Circle',
|
|
Direction = 'Direction',
|
|
VectorDocument = 'VectorDocument',
|
|
VectorDocumentSolid = 'VectorDocumentSolid',
|
|
LayersDifference = 'LayersDifference',
|
|
AntiClockwise = 'AntiClockwise',
|
|
Clockwise = 'Clockwise',
|
|
Github = 'Github',
|
|
Crop = 'Crop',
|
|
Folder = 'Folder',
|
|
FolderTick = 'FolderTick',
|
|
Save = 'Save',
|
|
Svg = 'Svg',
|
|
Pdf = 'Pdf',
|
|
PdfSolid = 'PdfSolid',
|
|
Png = 'Png',
|
|
Javascript = 'Javascript',
|
|
JavascriptSolid = 'JavascriptSolid',
|
|
Expand = 'Expand',
|
|
Image = 'Image',
|
|
ImageSolid = 'ImageSolid',
|
|
ArrowLeftCircle = 'ArrowLeftCircle',
|
|
ArrowRightCircle = 'ArrowRightCircle',
|
|
Measurement = 'Measurement',
|
|
FilePlus = 'FilePlus',
|
|
Edit = 'Edit',
|
|
SendUp = 'SendUp',
|
|
SendDown = 'SendDown',
|
|
AlignLeft = 'AlignLeft',
|
|
AlignRight = 'AlignRight',
|
|
AlignCenterHorizontal = 'AlignCenterHorizontal',
|
|
AlignTop = 'AlignTop',
|
|
AlignBottom = 'AlignBottom',
|
|
AlignCenterVertical = 'AlignCenterVertical',
|
|
Documents = 'Documents',
|
|
Download = 'Download',
|
|
FolderX = 'FolderX',
|
|
FolderPlus = 'FolderPlus',
|
|
AlignTextJustify = 'AlignTextJustify',
|
|
Eye = 'Eye',
|
|
EyeClosed = 'EyeClosed',
|
|
Lock = 'Lock',
|
|
Unlock = 'Unlock',
|
|
GridLayout = 'GridLayout',
|
|
HomeAlt = 'HomeAlt',
|
|
|
|
// Solid icons
|
|
SolidDown = 'SolidDown',
|
|
SolidUp = 'SolidUp',
|
|
SolidUpSmall = 'SolidUpSmall',
|
|
SolidDownSmall = 'SolidDownSmall',
|
|
|
|
// Custom icons
|
|
Scale = 'Scale',
|
|
}
|
|
|
|
const icons: Record<IconName, FC> = {
|
|
// Outline icons
|
|
[IconName.Line]: LineIcon,
|
|
[IconName.Square]: SquareIcon,
|
|
[IconName.Circle]: CircleIcon,
|
|
[IconName.Direction]: DirectionIcon,
|
|
[IconName.VectorDocument]: VectorDocumentIcon,
|
|
[IconName.VectorDocumentSolid]: VectorDocumentSolidIcon,
|
|
[IconName.LayersDifference]: LayersDifferenceIcon,
|
|
[IconName.AntiClockwise]: AntiClockwiseIcon,
|
|
[IconName.Clockwise]: ClockwiseIcon,
|
|
[IconName.Github]: GithubIcon,
|
|
[IconName.Crop]: CropIcon,
|
|
[IconName.Folder]: FolderIcon,
|
|
[IconName.FolderTick]: FolderTickIcon,
|
|
[IconName.Save]: SaveIcon,
|
|
[IconName.Svg]: SvgIcon,
|
|
[IconName.Pdf]: PdfIcon,
|
|
[IconName.PdfSolid]: PdfSolidIcon,
|
|
[IconName.Png]: PngIcon,
|
|
[IconName.Javascript]: JavascriptIcon,
|
|
[IconName.JavascriptSolid]: JavascriptSolidIcon,
|
|
[IconName.Expand]: ExpandIcon,
|
|
[IconName.Image]: ImageIcon,
|
|
[IconName.ImageSolid]: ImageSoldIcon,
|
|
[IconName.ArrowLeftCircle]: ArrowLeftCircle,
|
|
[IconName.ArrowRightCircle]: ArrowRightCircle,
|
|
[IconName.Measurement]: MeasurementIcon,
|
|
[IconName.FilePlus]: FilePlusIcon,
|
|
[IconName.Edit]: EditIcon,
|
|
[IconName.SendUp]: SendUpIcon,
|
|
[IconName.SendDown]: SendDownIcon,
|
|
[IconName.AlignLeft]: AlignLeftIcon,
|
|
[IconName.AlignRight]: AlignRightIcon,
|
|
[IconName.AlignCenterHorizontal]: AlignCenterHorizontalIcon,
|
|
[IconName.AlignTop]: AlignTopIcon,
|
|
[IconName.AlignBottom]: AlignBottomIcon,
|
|
[IconName.AlignCenterVertical]: AlignCenterVerticalIcon,
|
|
[IconName.Documents]: DocumentsIcon,
|
|
[IconName.Download]: DownloadIcon,
|
|
[IconName.FolderX]: FolderXIcon,
|
|
[IconName.FolderPlus]: FolderPlusIcon,
|
|
[IconName.AlignTextJustify]: AlignTextJustifyIcon,
|
|
[IconName.Eye]: EyeIcon,
|
|
[IconName.EyeClosed]: EyeClosedIcon,
|
|
[IconName.Lock]: LockIcon,
|
|
[IconName.Unlock]: UnlockIcon,
|
|
[IconName.GridLayout]: GridLayoutIcon,
|
|
[IconName.HomeAlt]: HomeAltIcon,
|
|
|
|
// Solid icons
|
|
[IconName.SolidDown]: SolidDownIcon,
|
|
[IconName.SolidUp]: SolidUpIcon,
|
|
[IconName.SolidUpSmall]: SolidUpSmallIcon,
|
|
[IconName.SolidDownSmall]: SolidDownSmallIcon,
|
|
|
|
// Custom icons
|
|
[IconName.Scale]: ScaleIcon,
|
|
};
|
|
|
|
export { IconName };
|
|
|
|
interface IconProps {
|
|
name: IconName;
|
|
className?: string;
|
|
}
|
|
|
|
export const Icon: FC<IconProps> = ({ name, className }) => {
|
|
const CurrentIcon = icons[name];
|
|
return (
|
|
<div className={`icon w-5${className ? ` ${className}` : ''}`}>
|
|
<CurrentIcon />
|
|
</div>
|
|
);
|
|
};
|