@czxingyu/xycomponents 0.1.4 → 0.1.5

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/dist/cli.js CHANGED
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env node
2
- import { resolve } from "node:path";
2
+ import { dirname, join, resolve } from "node:path";
3
3
  import { fileURLToPath } from "node:url";
4
+ import { cpSync, existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
4
5
  //#region cli/component-lifecycle.ts
5
6
  var componentDeprecations = [];
6
7
  var retiredComponents = [{
@@ -9936,6 +9937,139 @@ var packageMetadata = {
9936
9937
  schemaVersion: 1
9937
9938
  };
9938
9939
  //#endregion
9940
+ //#region cli/skills-install.ts
9941
+ var CONSUMER_SKILL_NAMES = [
9942
+ "xycomponents-shared",
9943
+ "xycomponents-cli",
9944
+ "xycomponents-contribute"
9945
+ ];
9946
+ var MAINTAINER_SKILL_NAMES = [...CONSUMER_SKILL_NAMES, "xycomponents-maintainer"];
9947
+ var SKILL_TARGETS = {
9948
+ agents: ".agents/skills",
9949
+ claude: ".claude/skills",
9950
+ codex: ".codex/skills",
9951
+ cursor: ".cursor/skills"
9952
+ };
9953
+ var AGENTS_GUIDE_START = "<!-- xycomponents:start -->";
9954
+ var AGENTS_GUIDE_END = "<!-- xycomponents:end -->";
9955
+ var AGENTS_GUIDE_BLOCK = `${AGENTS_GUIDE_START}
9956
+
9957
+ ## xycomponents Agent Guide
9958
+
9959
+ This project uses \`@czxingyu/xycomponents\`. Query component APIs with the **project-local** CLI (do not use a globally installed CLI):
9960
+
9961
+ \`\`\`bash
9962
+ pnpm exec xycomponents doctor --json
9963
+ pnpm exec xycomponents component <name> --json
9964
+ pnpm exec xycomponents snippet <name> --example <id>
9965
+ \`\`\`
9966
+
9967
+ Workflow skills are installed for multiple agents under \`.cursor/skills/\`, \`.claude/skills/\`, \`.codex/skills/\`, and \`.agents/skills/\`:
9968
+
9969
+ - \`xycomponents-shared\` — install, version alignment, Vue setup
9970
+ - \`xycomponents-cli\` — CLI commands and JSON metadata
9971
+ - \`xycomponents-contribute\` — GitHub Bug / Feature issues
9972
+
9973
+ Re-run \`pnpm exec xycomponents skills install\` after upgrading \`@czxingyu/xycomponents\` so agent guides stay in sync.
9974
+
9975
+ ${AGENTS_GUIDE_END}`;
9976
+ function moduleUrlToPath(moduleUrl) {
9977
+ return moduleUrl.startsWith("file:") ? fileURLToPath(moduleUrl) : moduleUrl;
9978
+ }
9979
+ function resolvePackageRoot(moduleUrl) {
9980
+ return resolve(dirname(moduleUrlToPath(moduleUrl)), "..");
9981
+ }
9982
+ function resolveSkillsSourceDir(moduleUrl) {
9983
+ return join(resolvePackageRoot(moduleUrl), "skills");
9984
+ }
9985
+ function resolveSkillNames(options) {
9986
+ if (options.maintainer) return [...MAINTAINER_SKILL_NAMES];
9987
+ if (options.consumer === false) return [...MAINTAINER_SKILL_NAMES];
9988
+ return [...CONSUMER_SKILL_NAMES];
9989
+ }
9990
+ function resolveSkillTargets(targets) {
9991
+ if (!targets || targets.length === 0) return Object.keys(SKILL_TARGETS);
9992
+ return targets.filter((target) => target in SKILL_TARGETS);
9993
+ }
9994
+ function readPackageVersion(packageRoot) {
9995
+ try {
9996
+ return JSON.parse(readFileSync(join(packageRoot, "package.json"), "utf8")).version ?? "unknown";
9997
+ } catch {
9998
+ return "unknown";
9999
+ }
10000
+ }
10001
+ function copySkillDirectory(source, destination, dryRun) {
10002
+ if (dryRun) return;
10003
+ mkdirSync(dirname(destination), { recursive: true });
10004
+ cpSync(source, destination, {
10005
+ force: true,
10006
+ recursive: true
10007
+ });
10008
+ }
10009
+ function upsertAgentsGuide(projectRoot, dryRun) {
10010
+ const agentsGuidePath = join(projectRoot, "AGENTS.md");
10011
+ const previous = existsSync(agentsGuidePath) ? readFileSync(agentsGuidePath, "utf8") : "";
10012
+ if (previous.includes(AGENTS_GUIDE_START) && previous.includes(AGENTS_GUIDE_END)) {
10013
+ const next = previous.replace(new RegExp(`${AGENTS_GUIDE_START}[\\s\\S]*?${AGENTS_GUIDE_END}`, "m"), AGENTS_GUIDE_BLOCK);
10014
+ if (!dryRun) writeFileSync(agentsGuidePath, next, "utf8");
10015
+ return {
10016
+ agentsGuide: previous === next ? "skipped" : "updated",
10017
+ agentsGuidePath
10018
+ };
10019
+ }
10020
+ const next = `${previous}${previous.length > 0 && !previous.endsWith("\n") ? "\n\n" : previous.length > 0 ? "\n" : ""}${AGENTS_GUIDE_BLOCK}\n`;
10021
+ if (!dryRun) writeFileSync(agentsGuidePath, next, "utf8");
10022
+ return {
10023
+ agentsGuide: previous.length > 0 ? "updated" : "created",
10024
+ agentsGuidePath
10025
+ };
10026
+ }
10027
+ function installSkills(options, moduleUrl = import.meta.url) {
10028
+ const projectRoot = resolve(options.projectRoot ?? process.cwd());
10029
+ const packageRoot = resolve(options.packageRoot ?? resolvePackageRoot(moduleUrl));
10030
+ const skillsSource = resolveSkillsSourceDir(moduleUrl);
10031
+ const skillNames = resolveSkillNames(options);
10032
+ const targets = resolveSkillTargets(options.targets);
10033
+ const installed = [];
10034
+ const skipped = [];
10035
+ if (!existsSync(skillsSource)) return {
10036
+ agentsGuide: "skipped",
10037
+ agentsGuidePath: join(projectRoot, "AGENTS.md"),
10038
+ installed,
10039
+ packageVersion: readPackageVersion(packageRoot),
10040
+ projectRoot,
10041
+ skillsSource,
10042
+ skipped: [`skills source missing: ${skillsSource}`],
10043
+ status: "fail"
10044
+ };
10045
+ for (const target of targets) {
10046
+ const targetRoot = join(projectRoot, SKILL_TARGETS[target]);
10047
+ for (const skillName of skillNames) {
10048
+ const sourceDir = join(skillsSource, skillName);
10049
+ const destinationDir = join(targetRoot, skillName);
10050
+ if (!existsSync(join(sourceDir, "SKILL.md"))) {
10051
+ skipped.push(`${skillName} (missing source for ${target})`);
10052
+ continue;
10053
+ }
10054
+ copySkillDirectory(sourceDir, destinationDir, options.dryRun === true);
10055
+ installed.push({
10056
+ path: join(SKILL_TARGETS[target], skillName, "SKILL.md"),
10057
+ skill: skillName,
10058
+ target
10059
+ });
10060
+ }
10061
+ }
10062
+ return {
10063
+ ...upsertAgentsGuide(projectRoot, options.dryRun === true),
10064
+ installed,
10065
+ packageVersion: readPackageVersion(packageRoot),
10066
+ projectRoot,
10067
+ skillsSource,
10068
+ skipped,
10069
+ status: installed.length > 0 ? "pass" : "fail"
10070
+ };
10071
+ }
10072
+ //#endregion
9939
10073
  //#region cli/index.ts
9940
10074
  function withTrailingNewline(value) {
9941
10075
  return value.endsWith("\n") ? value : `${value}\n`;
@@ -10005,6 +10139,7 @@ Usage:
10005
10139
  xycomponents migrate link --json
10006
10140
  xycomponents package --json
10007
10141
  xycomponents doctor --json
10142
+ xycomponents skills install --consumer --json
10008
10143
 
10009
10144
  Commands:
10010
10145
  components List every documented component
@@ -10012,7 +10147,8 @@ Commands:
10012
10147
  snippet <name> Print a component usage snippet
10013
10148
  migrate <name> Explain stable, deprecated, or retired migration status
10014
10149
  package Explain default and lite package entry contracts
10015
- doctor Print catalog and detailed-metadata coverage
10150
+ doctor Print catalog and detailed-metadata coverage
10151
+ skills install Install AI agent skills for Cursor, Claude Code, Codex, and AGENTS.md
10016
10152
  help Print this help message`);
10017
10153
  }
10018
10154
  function componentSummary(category) {
@@ -10067,6 +10203,39 @@ Lite: ${packageMetadata.entries.lite.import}
10067
10203
  Excludes: ${packageMetadata.entries.lite.excludedComponents.join(", ")}
10068
10204
  Docs: ${packageMetadata.docs}`);
10069
10205
  }
10206
+ function printSkillsInstall(flags, json) {
10207
+ const rawTargets = readFlag(flags, "target", "all").split(",").map((value) => value.trim()).filter(Boolean);
10208
+ const targets = rawTargets.length === 1 && rawTargets[0] === "all" ? resolveSkillTargets() : resolveSkillTargets(rawTargets);
10209
+ const report = installSkills({
10210
+ consumer: flags.has("consumer") || !flags.has("maintainer"),
10211
+ dryRun: flags.has("dry-run"),
10212
+ maintainer: flags.has("maintainer"),
10213
+ projectRoot: readFlag(flags, "project", process.cwd()),
10214
+ targets
10215
+ });
10216
+ if (json) {
10217
+ const payload = stringifyJson(report);
10218
+ return report.status === "pass" ? ok(payload) : {
10219
+ exitCode: 1,
10220
+ stderr: "",
10221
+ stdout: withTrailingNewline(payload)
10222
+ };
10223
+ }
10224
+ if (report.status !== "pass") return fail(["Failed to install xycomponents skills.", ...report.skipped].join("\n"));
10225
+ const lines = [
10226
+ `Installed ${report.installed.length} skill(s) for @czxingyu/xycomponents@${report.packageVersion}.`,
10227
+ `Project: ${report.projectRoot}`,
10228
+ `AGENTS.md: ${report.agentsGuide}`,
10229
+ "",
10230
+ "Targets:",
10231
+ ...Object.entries(SKILL_TARGETS).map(([name, directory]) => `- ${name}: ${directory}`),
10232
+ "",
10233
+ "Installed:",
10234
+ ...report.installed.map((item) => `- ${item.target}: ${item.path}`)
10235
+ ];
10236
+ if (report.skipped.length > 0) lines.push("", "Skipped:", ...report.skipped.map((item) => `- ${item}`));
10237
+ return ok(lines.join("\n"));
10238
+ }
10070
10239
  function printComponent(name, json) {
10071
10240
  if (!name) return fail("Missing component name.");
10072
10241
  const component = findComponent(name);
@@ -10154,10 +10323,15 @@ function runCli(argv) {
10154
10323
  if (argv.includes("-h")) return printHelp();
10155
10324
  const { flags, positionals } = parseArgs(argv);
10156
10325
  if (flags.has("help")) return printHelp();
10157
- const [rawCommand, componentName] = positionals;
10326
+ const [rawCommand, secondArg] = positionals;
10158
10327
  const command = rawCommand?.toLowerCase() ?? "help";
10159
10328
  const json = wantsJson(flags);
10160
10329
  if (command === "help") return printHelp();
10330
+ if (command === "skills") {
10331
+ if (secondArg?.toLowerCase() === "install") return printSkillsInstall(flags, json);
10332
+ return fail("Missing skills subcommand. Try \"xycomponents skills install\".");
10333
+ }
10334
+ const componentName = secondArg;
10161
10335
  if (command === "components" || command === "list") return printComponents(json, readFlag(flags, "category", "") || void 0, flags.has("include-retired"));
10162
10336
  if (command === "component" || command === "show") return printComponent(componentName, json);
10163
10337
  if (command === "snippet") return printSnippet(componentName, readFlag(flags, "example", "basic"), json);
package/dist/index.esm.js CHANGED
@@ -12,7 +12,7 @@ var qe = Object.create, Je = Object.defineProperty, Ye = Object.getOwnPropertyDe
12
12
  }, tt = (e, t, n) => (n = e == null ? {} : qe(Ze(e)), et(t || !e || !e.__esModule ? Je(n, "default", {
13
13
  value: e,
14
14
  enumerable: !0
15
- }) : n, e)), nt = "0.1.4";
15
+ }) : n, e)), nt = "0.1.5";
16
16
  //#endregion
17
17
  //#region components/shared/install.ts
18
18
  function X(e) {
@@ -9,7 +9,7 @@ import qe from "dayjs/plugin/quarterOfYear.js";
9
9
  import Je from "dayjs/plugin/weekOfYear.js";
10
10
  import Ye from "dayjs/plugin/weekYear.js";
11
11
  //#region package.json
12
- var Xe = "0.1.4";
12
+ var Xe = "0.1.5";
13
13
  //#endregion
14
14
  //#region components/shared/install.ts
15
15
  function Z(e) {
package/dist/index.umd.js CHANGED
@@ -1,4 +1,4 @@
1
- (function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require("vue"),require("dayjs")):typeof define==`function`&&define.amd?define([`exports`,`vue`,`dayjs`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.XyComponents={},e.Vue,e.dayjs))})(this,function(e,t,n){Object.defineProperties(e,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});var r=Object.create,i=Object.defineProperty,a=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,s=Object.getPrototypeOf,c=Object.prototype.hasOwnProperty,l=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(e){throw n=[e],e}},u=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),d=(e,t)=>{let n={};for(var r in e)i(n,r,{get:e[r],enumerable:!0});return t||i(n,Symbol.toStringTag,{value:`Module`}),n},f=(e,t,n,r)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var s=o(t),l=0,u=s.length,d;l<u;l++)d=s[l],!c.call(e,d)&&d!==n&&i(e,d,{get:(e=>t[e]).bind(null,d),enumerable:!(r=a(t,d))||r.enumerable});return e},p=(e,t,n)=>(n=e==null?{}:r(s(e)),f(t||!e||!e.__esModule?i(n,`default`,{value:e,enumerable:!0}):n,e));n=p(n,1);var m=`0.1.4`;function h(e){let t=e;return t.install=t=>{let n=e.name;n&&t.component(n,e)},t}var g={class:`xy-alert-marquee__content`,"aria-hidden":`true`},_=(0,t.defineComponent)({name:`XyAlertMarquee`,__name:`alert-marquee`,props:{direction:{type:String,required:!1,default:`left`},gradient:{type:Boolean,required:!1,default:!1},gap:{type:Number,required:!1,default:32},pauseOnHover:{type:Boolean,required:!1,default:!0},speed:{type:Number,required:!1,default:50}},setup(e){let n=e,r=(0,t.ref)(),i=(0,t.ref)(),a=(0,t.ref)(!1),o=(0,t.ref)(10),s,c=(0,t.computed)(()=>({"--xy-alert-marquee-duration":`${o.value}s`,"--xy-alert-marquee-gap":`${n.gap}px`})),l=(0,t.computed)(()=>[`xy-alert-marquee`,{"xy-alert-marquee--gradient":n.gradient,"xy-alert-marquee--paused":a.value,"xy-alert-marquee--reverse":n.direction===`right`}]);function u(){let e=i.value?.scrollWidth??0;!e||!n.speed||(o.value=(e+n.gap)/n.speed)}function d(){n.pauseOnHover&&(a.value=!0)}function f(){n.pauseOnHover&&(a.value=!1)}return(0,t.onMounted)(()=>{u(),!(typeof ResizeObserver>`u`)&&(s=new ResizeObserver(u),i.value&&s.observe(i.value),r.value&&s.observe(r.value))}),(0,t.onBeforeUnmount)(()=>{s?.disconnect()}),(e,n)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{ref_key:`rootRef`,ref:r,class:(0,t.normalizeClass)(l.value),onMouseenter:d,onMouseleave:f},[(0,t.createElementVNode)(`div`,{class:`xy-alert-marquee__track`,style:(0,t.normalizeStyle)(c.value)},[(0,t.createElementVNode)(`span`,{ref_key:`contentRef`,ref:i,class:`xy-alert-marquee__content`},[(0,t.renderSlot)(e.$slots,`default`,{},void 0,!0)],512),(0,t.createElementVNode)(`span`,g,[(0,t.renderSlot)(e.$slots,`default`,{},void 0,!0)])],4)],34))}}),v=(e,t)=>{let n=e.__vccOpts||e;for(let[e,r]of t)n[e]=r;return n},y=v(_,[[`__scopeId`,`data-v-725f3481`]]),b=0;function x(e){return e==null?[]:Array.isArray(e)?[...e]:[e]}function S(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function C(e){let t={};for(let n of Object.keys(e))e[n]!==void 0&&(t[n]=e[n]);return t}function w(e,t){let n={};for(let r of A(e,t))for(let e of Object.keys(r)){let t=r[e];t&&(n[e]=[n[e],t].filter(Boolean).join(` `))}return n}function T(e,t){let n={};for(let r of A(e,t))for(let e of Object.keys(r)){let t=r[e];S(t)&&(n[e]={...n[e],...t})}return n}function E(...e){return t=>{for(let n of e)n?.(t)}}function D(){return typeof window<`u`&&typeof document<`u`}function O(e=`xy`){return b+=1,`${e}-${b}`}function k(e,t){return!!(e&&t instanceof Node&&(e===t||e.contains(t)))}function A(e,t){let n=[];for(let r of x(e)){if(!r)continue;let e=typeof r==`function`?r({props:t}):r;S(e)&&n.push(e)}return n}function j(e,t,n,r){return e.addEventListener(t,n,r),()=>e.removeEventListener(t,n,r)}var M=[`a[href]`,`area[href]`,`button:not([disabled])`,`input:not([disabled]):not([type='hidden'])`,`select:not([disabled])`,`textarea:not([disabled])`,`iframe`,`object`,`embed`,`[contenteditable='true']`,`[tabindex]:not([tabindex='-1'])`].join(`,`);function N(e){return!(e instanceof HTMLElement)||e.getAttribute(`aria-hidden`)===`true`||e.hasAttribute(`disabled`)?!1:e.matches(M)}function P(e){return e?Array.from(e.querySelectorAll(M)).filter(N):[]}function F(e,t={}){return N(e)?(e.focus(t),document.activeElement===e):!1}function I(e,t={}){return F(P(e)[0],t)}function L(e,t={}){return F(P(e).at(-1),t)}function R(e){let{currentIndex:t,itemCount:n,offset:r}=e,i=e.loop??!0;if(n<=0||r===0)return-1;let a=t;for(let t=0;t<n;t+=1){if(a+=r,i)a=(a+n)%n;else if(a<0||a>=n)return-1;if(!e.isDisabled?.(a))return a}return-1}function z(e){if(e.key===`ArrowDown`||e.key===`ArrowRight`)return`next`;if(e.key===`ArrowUp`||e.key===`ArrowLeft`)return`previous`;if(e.key===`Home`)return`first`;if(e.key===`End`)return`last`;if(e.key===`Enter`||e.key===` `)return`activate`}function B(e){return!e.altKey&&!e.ctrlKey&&!e.metaKey&&e.key.length===1&&e.key.trim().length>0}function V(e){let t=U(e.search),n=e.items.length,r=e.loop??!0;if(!t||n<=0)return-1;let i=e.currentIndex??-1;for(let a=1;a<=n;a+=1){let o=r?(i+a+n)%n:i+a;if(o<0||o>=n)return-1;let s=e.items[o];if(!e.isDisabled?.(s,o)&&U(e.getText(s)??``).startsWith(t))return o}return-1}function H(e,n={}){let r,i=r=>{r.key!==`Escape`||(0,t.toValue)(n.active)===!1||(n.preventDefault&&r.preventDefault(),n.stopPropagation&&r.stopPropagation(),e(r))};function a(){if(r?.(),r=void 0,!D())return;let e=(0,t.toValue)(n.target)??document;e.addEventListener(`keydown`,i),r=()=>e.removeEventListener(`keydown`,i)}return(0,t.onMounted)(a),(0,t.onBeforeUnmount)(()=>r?.()),(0,t.watch)(()=>(0,t.toValue)(n.target),a),()=>r?.()}function U(e){return e.trim().toLocaleLowerCase()}function W(e,t=[]){return[e,...t]}function G(e,t={}){let n=[],r=[],i=new Map,a=new Map,o=new Map;function s(e,c,l,u,d,f){e.forEach((e,p)=>{let m=[...f,p],h={index:p,indexPath:m,level:u,parentKey:c,parentKeyPath:l},g=t.getKey?.(e,h),_=g!==void 0&&(t.isNode?.(e,h)??!0),v=t.getChildren?.(e)??[];if(!_||g===void 0){s(v,c,l,u,d,m);return}let y=W(g,l),b={children:[],index:p,indexPath:m,item:e,key:g,keyPath:y,level:u,parentKey:c};n.push(b),i.set(g,b),a.set(g,c),d?d.children.push(b):r.push(b);let x=o.get(c)??[];x.push(g),o.set(c,x),s(v,g,y,u+1,b,m)})}return s(e,``,[],0,void 0,[]),{getChildrenKeys(e){return[...o.get(e)??[]]},getDescendantKeys(e){let t=i.get(e);return t?te(t):[]},getKeyPath(e){return[...i.get(e)?.keyPath??[]]},getNode(e){return i.get(e)},getParentKey(e){return a.get(e)},getSiblingKeys(e){let t=a.get(e);return t===void 0?[]:[...o.get(t)??[]]},nodeMap:i,nodes:n,parentKeyMap:a,rootNodes:r}}function K(){let e=(0,t.shallowRef)([]),n=(0,t.computed)(()=>e.value.map(({order:e,...t})=>t)),r=0;return{collection:(0,t.computed)(()=>ee(e.value)),nodes:n,registerNode(t){let n={...t,order:r++,parentKey:t.parentKey??``};return e.value=[...e.value.filter(e=>e.key!==t.key),n],()=>{e.value=e.value.filter(e=>e.key!==t.key||e.order!==n.order)}}}}function ee(e){let t=[],n=[],r=new Map,i=new Map,a=new Map,o=new Set(e.map(e=>e.key)),s=new Map;for(let t of e){let e=t.parentKey&&o.has(t.parentKey)?t.parentKey:``,n=s.get(e)??[];n.push(t),s.set(e,n)}for(let e of s.values())e.sort(ne);function c(e,o,l,u,d){(s.get(e)??[]).forEach((s,f)=>{let p=s.index??f,m=[...d,f],h=W(s.key,o),g={children:[],index:p,indexPath:m,item:s.item,key:s.key,keyPath:h,level:l,parentKey:e};t.push(g),r.set(g.key,g),i.set(g.key,e),u?u.children.push(g):n.push(g);let _=a.get(e)??[];_.push(g.key),a.set(e,_),c(g.key,h,l+1,g,m)})}return c(``,[],0,void 0,[]),{getChildrenKeys(e){return[...a.get(e)??[]]},getDescendantKeys(e){let t=r.get(e);return t?te(t):[]},getKeyPath(e){return[...r.get(e)?.keyPath??[]]},getNode(e){return r.get(e)},getParentKey(e){return i.get(e)},getSiblingKeys(e){let t=i.get(e);return t===void 0?[]:[...a.get(t)??[]]},nodeMap:r,nodes:t,parentKeyMap:i,rootNodes:n}}function te(e){let t=[];for(let n of e.children)t.push(n.key,...te(n));return t}function ne(e,t){return(e.index??e.order)-(t.index??t.order)||e.order-t.order}var re={direction:`ltr`,disabled:!1,locale:`zh-CN`,prefixCls:`xy`,size:`md`,zIndex:1e3},ie=Symbol(`xy-config`);function ae(e,t={}){return{direction:t.direction??e.direction,disabled:t.disabled??e.disabled,locale:t.locale??e.locale,prefixCls:t.prefixCls??e.prefixCls,size:t.size??e.size,zIndex:t.zIndex??e.zIndex}}function oe(e){let n=(0,t.inject)(ie,(0,t.computed)(()=>re)),r=(0,t.computed)(()=>ae(n.value,(0,t.toValue)(e)));return(0,t.provide)(ie,r),r}function se(e){let n=(0,t.inject)(ie,(0,t.computed)(()=>re));return(0,t.computed)(()=>e?ae(n.value,(0,t.toValue)(e)):n.value)}function ce(e,t){let n=e.prefixCls??re.prefixCls;return t?`${n}-${t}`:n}function le(e,t){let n=ce(re,t),r=ce(e,t);return n===r?[n]:[n,r]}var ue=Symbol(`xy-form-control`);function de(e){return(0,t.provide)(ue,e),e}function fe(e){let n=(0,t.inject)(ue,void 0),r=se(),i=(0,t.getCurrentInstance)(),a=(0,t.computed)(()=>(0,t.toValue)(e)),o=(0,t.computed)(()=>{if(!i)return a.value.disabled!==void 0;let e=i.vnode.props??{};return Object.prototype.hasOwnProperty.call(e,`disabled`)});return{describedBy:(0,t.computed)(()=>(0,t.toValue)(n?.describedBy)),disabled:(0,t.computed)(()=>(o.value?a.value.disabled:void 0)??(0,t.toValue)(n?.disabled)??r.value.disabled),id:(0,t.computed)(()=>a.value.id??(0,t.toValue)(n?.id)),labelledBy:(0,t.computed)(()=>(0,t.toValue)(n?.labelledBy)),notifyBlur:e=>n?.onBlur?.(e),notifyChange:e=>n?.onChange?.(e),readonly:(0,t.computed)(()=>a.value.readonly??!!(0,t.toValue)(n?.readonly)),size:(0,t.computed)(()=>a.value.size??(0,t.toValue)(n?.size)??r.value.size),status:(0,t.computed)(()=>a.value.status??(0,t.toValue)(n?.status))}}function q(e,t){e.value=t}var J={add:(e,t,r)=>(0,n.default)(e).add(t,r),compare(e,t,r=`millisecond`){let i=(0,n.default)(e),a=(0,n.default)(t);return i.isSame(a,r)?0:i.isBefore(a,r)?-1:1},format:(e,t)=>e?(0,n.default)(e).format(t):``,isValid:e=>(0,n.default)(e).isValid(),parse:e=>(0,n.default)(e),startOf:(e,t)=>(0,n.default)(e).startOf(t)};function pe(){return pe=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},pe.apply(this,arguments)}function me(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,ge(e,t)}function he(e){return he=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},he(e)}function ge(e,t){return ge=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},ge(e,t)}function _e(){if(typeof Reflect>`u`||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy==`function`)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function ve(e,t,n){return ve=_e()?Reflect.construct.bind():function(e,t,n){var r=[null];r.push.apply(r,t);var i=new(Function.bind.apply(e,r));return n&&ge(i,n.prototype),i},ve.apply(null,arguments)}function ye(e){return Function.toString.call(e).indexOf(`[native code]`)!==-1}function be(e){var t=typeof Map==`function`?new Map:void 0;return be=function(e){if(e===null||!ye(e))return e;if(typeof e!=`function`)throw TypeError(`Super expression must either be null or a function`);if(t!==void 0){if(t.has(e))return t.get(e);t.set(e,n)}function n(){return ve(e,arguments,he(this).constructor)}return n.prototype=Object.create(e.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),ge(n,e)},be(e)}var xe=/%[sdj%]/g,Se=function(){};typeof process<`u`&&process.env&&process.env.NODE_ENV!==`production`&&typeof window<`u`&&typeof document<`u`&&(Se=function(e,t){typeof console<`u`&&console.warn&&typeof ASYNC_VALIDATOR_NO_WARNING>`u`&&t.every(function(e){return typeof e==`string`})&&console.warn(e,t)});function Ce(e){if(!e||!e.length)return null;var t={};return e.forEach(function(e){var n=e.field;t[n]=t[n]||[],t[n].push(e)}),t}function we(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];var i=0,a=n.length;return typeof e==`function`?e.apply(null,n):typeof e==`string`?e.replace(xe,function(e){if(e===`%%`)return`%`;if(i>=a)return e;switch(e){case`%s`:return String(n[i++]);case`%d`:return Number(n[i++]);case`%j`:try{return JSON.stringify(n[i++])}catch{return`[Circular]`}break;default:return e}}):e}function Te(e){return e===`string`||e===`url`||e===`hex`||e===`email`||e===`date`||e===`pattern`}function Y(e,t){return!!(e==null||t===`array`&&Array.isArray(e)&&!e.length||Te(t)&&typeof e==`string`&&!e)}function Ee(e,t,n){var r=[],i=0,a=e.length;function o(e){r.push.apply(r,e||[]),i++,i===a&&n(r)}e.forEach(function(e){t(e,o)})}function De(e,t,n){var r=0,i=e.length;function a(o){if(o&&o.length){n(o);return}var s=r;r+=1,s<i?t(e[s],a):n([])}a([])}function Oe(e){var t=[];return Object.keys(e).forEach(function(n){t.push.apply(t,e[n]||[])}),t}var ke=function(e){me(t,e);function t(t,n){var r=e.call(this,`Async Validation Error`)||this;return r.errors=t,r.fields=n,r}return t}(be(Error));function Ae(e,t,n,r,i){if(t.first){var a=new Promise(function(t,a){De(Oe(e),n,function(e){return r(e),e.length?a(new ke(e,Ce(e))):t(i)})});return a.catch(function(e){return e}),a}var o=t.firstFields===!0?Object.keys(e):t.firstFields||[],s=Object.keys(e),c=s.length,l=0,u=[],d=new Promise(function(t,a){var d=function(e){if(u.push.apply(u,e),l++,l===c)return r(u),u.length?a(new ke(u,Ce(u))):t(i)};s.length||(r(u),t(i)),s.forEach(function(t){var r=e[t];o.indexOf(t)===-1?Ee(r,n,d):De(r,n,d)})});return d.catch(function(e){return e}),d}function je(e){return!!(e&&e.message!==void 0)}function Me(e,t){for(var n=e,r=0;r<t.length;r++){if(n==null)return n;n=n[t[r]]}return n}function Ne(e,t){return function(n){var r=e.fullFields?Me(t,e.fullFields):t[n.field||e.fullField];return je(n)?(n.field=n.field||e.fullField,n.fieldValue=r,n):{message:typeof n==`function`?n():n,fieldValue:r,field:n.field||e.fullField}}}function Pe(e,t){if(t){for(var n in t)if(t.hasOwnProperty(n)){var r=t[n];typeof r==`object`&&typeof e[n]==`object`?e[n]=pe({},e[n],r):e[n]=r}}return e}var Fe=function(e,t,n,r,i,a){e.required&&(!n.hasOwnProperty(e.field)||Y(t,a||e.type))&&r.push(we(i.messages.required,e.fullField))},Ie=function(e,t,n,r,i){(/^\s+$/.test(t)||t===``)&&r.push(we(i.messages.whitespace,e.fullField))},Le,Re=(function(){if(Le)return Le;var e=`[a-fA-F\\d:]`,t=function(t){return t&&t.includeBoundaries?`(?:(?<=\\s|^)(?=`+e+`)|(?<=`+e+`)(?=\\s|$))`:``},n=`(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}`,r=`[a-fA-F\\d]{1,4}`,i=(`
1
+ (function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require("vue"),require("dayjs")):typeof define==`function`&&define.amd?define([`exports`,`vue`,`dayjs`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.XyComponents={},e.Vue,e.dayjs))})(this,function(e,t,n){Object.defineProperties(e,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});var r=Object.create,i=Object.defineProperty,a=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,s=Object.getPrototypeOf,c=Object.prototype.hasOwnProperty,l=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(e){throw n=[e],e}},u=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),d=(e,t)=>{let n={};for(var r in e)i(n,r,{get:e[r],enumerable:!0});return t||i(n,Symbol.toStringTag,{value:`Module`}),n},f=(e,t,n,r)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var s=o(t),l=0,u=s.length,d;l<u;l++)d=s[l],!c.call(e,d)&&d!==n&&i(e,d,{get:(e=>t[e]).bind(null,d),enumerable:!(r=a(t,d))||r.enumerable});return e},p=(e,t,n)=>(n=e==null?{}:r(s(e)),f(t||!e||!e.__esModule?i(n,`default`,{value:e,enumerable:!0}):n,e));n=p(n,1);var m=`0.1.5`;function h(e){let t=e;return t.install=t=>{let n=e.name;n&&t.component(n,e)},t}var g={class:`xy-alert-marquee__content`,"aria-hidden":`true`},_=(0,t.defineComponent)({name:`XyAlertMarquee`,__name:`alert-marquee`,props:{direction:{type:String,required:!1,default:`left`},gradient:{type:Boolean,required:!1,default:!1},gap:{type:Number,required:!1,default:32},pauseOnHover:{type:Boolean,required:!1,default:!0},speed:{type:Number,required:!1,default:50}},setup(e){let n=e,r=(0,t.ref)(),i=(0,t.ref)(),a=(0,t.ref)(!1),o=(0,t.ref)(10),s,c=(0,t.computed)(()=>({"--xy-alert-marquee-duration":`${o.value}s`,"--xy-alert-marquee-gap":`${n.gap}px`})),l=(0,t.computed)(()=>[`xy-alert-marquee`,{"xy-alert-marquee--gradient":n.gradient,"xy-alert-marquee--paused":a.value,"xy-alert-marquee--reverse":n.direction===`right`}]);function u(){let e=i.value?.scrollWidth??0;!e||!n.speed||(o.value=(e+n.gap)/n.speed)}function d(){n.pauseOnHover&&(a.value=!0)}function f(){n.pauseOnHover&&(a.value=!1)}return(0,t.onMounted)(()=>{u(),!(typeof ResizeObserver>`u`)&&(s=new ResizeObserver(u),i.value&&s.observe(i.value),r.value&&s.observe(r.value))}),(0,t.onBeforeUnmount)(()=>{s?.disconnect()}),(e,n)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{ref_key:`rootRef`,ref:r,class:(0,t.normalizeClass)(l.value),onMouseenter:d,onMouseleave:f},[(0,t.createElementVNode)(`div`,{class:`xy-alert-marquee__track`,style:(0,t.normalizeStyle)(c.value)},[(0,t.createElementVNode)(`span`,{ref_key:`contentRef`,ref:i,class:`xy-alert-marquee__content`},[(0,t.renderSlot)(e.$slots,`default`,{},void 0,!0)],512),(0,t.createElementVNode)(`span`,g,[(0,t.renderSlot)(e.$slots,`default`,{},void 0,!0)])],4)],34))}}),v=(e,t)=>{let n=e.__vccOpts||e;for(let[e,r]of t)n[e]=r;return n},y=v(_,[[`__scopeId`,`data-v-725f3481`]]),b=0;function x(e){return e==null?[]:Array.isArray(e)?[...e]:[e]}function S(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function C(e){let t={};for(let n of Object.keys(e))e[n]!==void 0&&(t[n]=e[n]);return t}function w(e,t){let n={};for(let r of A(e,t))for(let e of Object.keys(r)){let t=r[e];t&&(n[e]=[n[e],t].filter(Boolean).join(` `))}return n}function T(e,t){let n={};for(let r of A(e,t))for(let e of Object.keys(r)){let t=r[e];S(t)&&(n[e]={...n[e],...t})}return n}function E(...e){return t=>{for(let n of e)n?.(t)}}function D(){return typeof window<`u`&&typeof document<`u`}function O(e=`xy`){return b+=1,`${e}-${b}`}function k(e,t){return!!(e&&t instanceof Node&&(e===t||e.contains(t)))}function A(e,t){let n=[];for(let r of x(e)){if(!r)continue;let e=typeof r==`function`?r({props:t}):r;S(e)&&n.push(e)}return n}function j(e,t,n,r){return e.addEventListener(t,n,r),()=>e.removeEventListener(t,n,r)}var M=[`a[href]`,`area[href]`,`button:not([disabled])`,`input:not([disabled]):not([type='hidden'])`,`select:not([disabled])`,`textarea:not([disabled])`,`iframe`,`object`,`embed`,`[contenteditable='true']`,`[tabindex]:not([tabindex='-1'])`].join(`,`);function N(e){return!(e instanceof HTMLElement)||e.getAttribute(`aria-hidden`)===`true`||e.hasAttribute(`disabled`)?!1:e.matches(M)}function P(e){return e?Array.from(e.querySelectorAll(M)).filter(N):[]}function F(e,t={}){return N(e)?(e.focus(t),document.activeElement===e):!1}function I(e,t={}){return F(P(e)[0],t)}function L(e,t={}){return F(P(e).at(-1),t)}function R(e){let{currentIndex:t,itemCount:n,offset:r}=e,i=e.loop??!0;if(n<=0||r===0)return-1;let a=t;for(let t=0;t<n;t+=1){if(a+=r,i)a=(a+n)%n;else if(a<0||a>=n)return-1;if(!e.isDisabled?.(a))return a}return-1}function z(e){if(e.key===`ArrowDown`||e.key===`ArrowRight`)return`next`;if(e.key===`ArrowUp`||e.key===`ArrowLeft`)return`previous`;if(e.key===`Home`)return`first`;if(e.key===`End`)return`last`;if(e.key===`Enter`||e.key===` `)return`activate`}function B(e){return!e.altKey&&!e.ctrlKey&&!e.metaKey&&e.key.length===1&&e.key.trim().length>0}function V(e){let t=U(e.search),n=e.items.length,r=e.loop??!0;if(!t||n<=0)return-1;let i=e.currentIndex??-1;for(let a=1;a<=n;a+=1){let o=r?(i+a+n)%n:i+a;if(o<0||o>=n)return-1;let s=e.items[o];if(!e.isDisabled?.(s,o)&&U(e.getText(s)??``).startsWith(t))return o}return-1}function H(e,n={}){let r,i=r=>{r.key!==`Escape`||(0,t.toValue)(n.active)===!1||(n.preventDefault&&r.preventDefault(),n.stopPropagation&&r.stopPropagation(),e(r))};function a(){if(r?.(),r=void 0,!D())return;let e=(0,t.toValue)(n.target)??document;e.addEventListener(`keydown`,i),r=()=>e.removeEventListener(`keydown`,i)}return(0,t.onMounted)(a),(0,t.onBeforeUnmount)(()=>r?.()),(0,t.watch)(()=>(0,t.toValue)(n.target),a),()=>r?.()}function U(e){return e.trim().toLocaleLowerCase()}function W(e,t=[]){return[e,...t]}function G(e,t={}){let n=[],r=[],i=new Map,a=new Map,o=new Map;function s(e,c,l,u,d,f){e.forEach((e,p)=>{let m=[...f,p],h={index:p,indexPath:m,level:u,parentKey:c,parentKeyPath:l},g=t.getKey?.(e,h),_=g!==void 0&&(t.isNode?.(e,h)??!0),v=t.getChildren?.(e)??[];if(!_||g===void 0){s(v,c,l,u,d,m);return}let y=W(g,l),b={children:[],index:p,indexPath:m,item:e,key:g,keyPath:y,level:u,parentKey:c};n.push(b),i.set(g,b),a.set(g,c),d?d.children.push(b):r.push(b);let x=o.get(c)??[];x.push(g),o.set(c,x),s(v,g,y,u+1,b,m)})}return s(e,``,[],0,void 0,[]),{getChildrenKeys(e){return[...o.get(e)??[]]},getDescendantKeys(e){let t=i.get(e);return t?te(t):[]},getKeyPath(e){return[...i.get(e)?.keyPath??[]]},getNode(e){return i.get(e)},getParentKey(e){return a.get(e)},getSiblingKeys(e){let t=a.get(e);return t===void 0?[]:[...o.get(t)??[]]},nodeMap:i,nodes:n,parentKeyMap:a,rootNodes:r}}function K(){let e=(0,t.shallowRef)([]),n=(0,t.computed)(()=>e.value.map(({order:e,...t})=>t)),r=0;return{collection:(0,t.computed)(()=>ee(e.value)),nodes:n,registerNode(t){let n={...t,order:r++,parentKey:t.parentKey??``};return e.value=[...e.value.filter(e=>e.key!==t.key),n],()=>{e.value=e.value.filter(e=>e.key!==t.key||e.order!==n.order)}}}}function ee(e){let t=[],n=[],r=new Map,i=new Map,a=new Map,o=new Set(e.map(e=>e.key)),s=new Map;for(let t of e){let e=t.parentKey&&o.has(t.parentKey)?t.parentKey:``,n=s.get(e)??[];n.push(t),s.set(e,n)}for(let e of s.values())e.sort(ne);function c(e,o,l,u,d){(s.get(e)??[]).forEach((s,f)=>{let p=s.index??f,m=[...d,f],h=W(s.key,o),g={children:[],index:p,indexPath:m,item:s.item,key:s.key,keyPath:h,level:l,parentKey:e};t.push(g),r.set(g.key,g),i.set(g.key,e),u?u.children.push(g):n.push(g);let _=a.get(e)??[];_.push(g.key),a.set(e,_),c(g.key,h,l+1,g,m)})}return c(``,[],0,void 0,[]),{getChildrenKeys(e){return[...a.get(e)??[]]},getDescendantKeys(e){let t=r.get(e);return t?te(t):[]},getKeyPath(e){return[...r.get(e)?.keyPath??[]]},getNode(e){return r.get(e)},getParentKey(e){return i.get(e)},getSiblingKeys(e){let t=i.get(e);return t===void 0?[]:[...a.get(t)??[]]},nodeMap:r,nodes:t,parentKeyMap:i,rootNodes:n}}function te(e){let t=[];for(let n of e.children)t.push(n.key,...te(n));return t}function ne(e,t){return(e.index??e.order)-(t.index??t.order)||e.order-t.order}var re={direction:`ltr`,disabled:!1,locale:`zh-CN`,prefixCls:`xy`,size:`md`,zIndex:1e3},ie=Symbol(`xy-config`);function ae(e,t={}){return{direction:t.direction??e.direction,disabled:t.disabled??e.disabled,locale:t.locale??e.locale,prefixCls:t.prefixCls??e.prefixCls,size:t.size??e.size,zIndex:t.zIndex??e.zIndex}}function oe(e){let n=(0,t.inject)(ie,(0,t.computed)(()=>re)),r=(0,t.computed)(()=>ae(n.value,(0,t.toValue)(e)));return(0,t.provide)(ie,r),r}function se(e){let n=(0,t.inject)(ie,(0,t.computed)(()=>re));return(0,t.computed)(()=>e?ae(n.value,(0,t.toValue)(e)):n.value)}function ce(e,t){let n=e.prefixCls??re.prefixCls;return t?`${n}-${t}`:n}function le(e,t){let n=ce(re,t),r=ce(e,t);return n===r?[n]:[n,r]}var ue=Symbol(`xy-form-control`);function de(e){return(0,t.provide)(ue,e),e}function fe(e){let n=(0,t.inject)(ue,void 0),r=se(),i=(0,t.getCurrentInstance)(),a=(0,t.computed)(()=>(0,t.toValue)(e)),o=(0,t.computed)(()=>{if(!i)return a.value.disabled!==void 0;let e=i.vnode.props??{};return Object.prototype.hasOwnProperty.call(e,`disabled`)});return{describedBy:(0,t.computed)(()=>(0,t.toValue)(n?.describedBy)),disabled:(0,t.computed)(()=>(o.value?a.value.disabled:void 0)??(0,t.toValue)(n?.disabled)??r.value.disabled),id:(0,t.computed)(()=>a.value.id??(0,t.toValue)(n?.id)),labelledBy:(0,t.computed)(()=>(0,t.toValue)(n?.labelledBy)),notifyBlur:e=>n?.onBlur?.(e),notifyChange:e=>n?.onChange?.(e),readonly:(0,t.computed)(()=>a.value.readonly??!!(0,t.toValue)(n?.readonly)),size:(0,t.computed)(()=>a.value.size??(0,t.toValue)(n?.size)??r.value.size),status:(0,t.computed)(()=>a.value.status??(0,t.toValue)(n?.status))}}function q(e,t){e.value=t}var J={add:(e,t,r)=>(0,n.default)(e).add(t,r),compare(e,t,r=`millisecond`){let i=(0,n.default)(e),a=(0,n.default)(t);return i.isSame(a,r)?0:i.isBefore(a,r)?-1:1},format:(e,t)=>e?(0,n.default)(e).format(t):``,isValid:e=>(0,n.default)(e).isValid(),parse:e=>(0,n.default)(e),startOf:(e,t)=>(0,n.default)(e).startOf(t)};function pe(){return pe=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},pe.apply(this,arguments)}function me(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,ge(e,t)}function he(e){return he=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},he(e)}function ge(e,t){return ge=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},ge(e,t)}function _e(){if(typeof Reflect>`u`||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy==`function`)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function ve(e,t,n){return ve=_e()?Reflect.construct.bind():function(e,t,n){var r=[null];r.push.apply(r,t);var i=new(Function.bind.apply(e,r));return n&&ge(i,n.prototype),i},ve.apply(null,arguments)}function ye(e){return Function.toString.call(e).indexOf(`[native code]`)!==-1}function be(e){var t=typeof Map==`function`?new Map:void 0;return be=function(e){if(e===null||!ye(e))return e;if(typeof e!=`function`)throw TypeError(`Super expression must either be null or a function`);if(t!==void 0){if(t.has(e))return t.get(e);t.set(e,n)}function n(){return ve(e,arguments,he(this).constructor)}return n.prototype=Object.create(e.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),ge(n,e)},be(e)}var xe=/%[sdj%]/g,Se=function(){};typeof process<`u`&&process.env&&process.env.NODE_ENV!==`production`&&typeof window<`u`&&typeof document<`u`&&(Se=function(e,t){typeof console<`u`&&console.warn&&typeof ASYNC_VALIDATOR_NO_WARNING>`u`&&t.every(function(e){return typeof e==`string`})&&console.warn(e,t)});function Ce(e){if(!e||!e.length)return null;var t={};return e.forEach(function(e){var n=e.field;t[n]=t[n]||[],t[n].push(e)}),t}function we(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];var i=0,a=n.length;return typeof e==`function`?e.apply(null,n):typeof e==`string`?e.replace(xe,function(e){if(e===`%%`)return`%`;if(i>=a)return e;switch(e){case`%s`:return String(n[i++]);case`%d`:return Number(n[i++]);case`%j`:try{return JSON.stringify(n[i++])}catch{return`[Circular]`}break;default:return e}}):e}function Te(e){return e===`string`||e===`url`||e===`hex`||e===`email`||e===`date`||e===`pattern`}function Y(e,t){return!!(e==null||t===`array`&&Array.isArray(e)&&!e.length||Te(t)&&typeof e==`string`&&!e)}function Ee(e,t,n){var r=[],i=0,a=e.length;function o(e){r.push.apply(r,e||[]),i++,i===a&&n(r)}e.forEach(function(e){t(e,o)})}function De(e,t,n){var r=0,i=e.length;function a(o){if(o&&o.length){n(o);return}var s=r;r+=1,s<i?t(e[s],a):n([])}a([])}function Oe(e){var t=[];return Object.keys(e).forEach(function(n){t.push.apply(t,e[n]||[])}),t}var ke=function(e){me(t,e);function t(t,n){var r=e.call(this,`Async Validation Error`)||this;return r.errors=t,r.fields=n,r}return t}(be(Error));function Ae(e,t,n,r,i){if(t.first){var a=new Promise(function(t,a){De(Oe(e),n,function(e){return r(e),e.length?a(new ke(e,Ce(e))):t(i)})});return a.catch(function(e){return e}),a}var o=t.firstFields===!0?Object.keys(e):t.firstFields||[],s=Object.keys(e),c=s.length,l=0,u=[],d=new Promise(function(t,a){var d=function(e){if(u.push.apply(u,e),l++,l===c)return r(u),u.length?a(new ke(u,Ce(u))):t(i)};s.length||(r(u),t(i)),s.forEach(function(t){var r=e[t];o.indexOf(t)===-1?Ee(r,n,d):De(r,n,d)})});return d.catch(function(e){return e}),d}function je(e){return!!(e&&e.message!==void 0)}function Me(e,t){for(var n=e,r=0;r<t.length;r++){if(n==null)return n;n=n[t[r]]}return n}function Ne(e,t){return function(n){var r=e.fullFields?Me(t,e.fullFields):t[n.field||e.fullField];return je(n)?(n.field=n.field||e.fullField,n.fieldValue=r,n):{message:typeof n==`function`?n():n,fieldValue:r,field:n.field||e.fullField}}}function Pe(e,t){if(t){for(var n in t)if(t.hasOwnProperty(n)){var r=t[n];typeof r==`object`&&typeof e[n]==`object`?e[n]=pe({},e[n],r):e[n]=r}}return e}var Fe=function(e,t,n,r,i,a){e.required&&(!n.hasOwnProperty(e.field)||Y(t,a||e.type))&&r.push(we(i.messages.required,e.fullField))},Ie=function(e,t,n,r,i){(/^\s+$/.test(t)||t===``)&&r.push(we(i.messages.whitespace,e.fullField))},Le,Re=(function(){if(Le)return Le;var e=`[a-fA-F\\d:]`,t=function(t){return t&&t.includeBoundaries?`(?:(?<=\\s|^)(?=`+e+`)|(?<=`+e+`)(?=\\s|$))`:``},n=`(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}`,r=`[a-fA-F\\d]{1,4}`,i=(`
2
2
  (?:
3
3
  (?:`+r+`:){7}(?:`+r+`|:)| // 1:2:3:4:5:6:7:: 1:2:3:4:5:6:7:8
4
4
  (?:`+r+`:){6}(?:`+n+`|:`+r+`|:)| // 1:2:3:4:5:6:: 1:2:3:4:5:6::8 1:2:3:4:5:6::8 1:2:3:4:5:6::1.2.3.4
package/dist/package.js CHANGED
@@ -1,4 +1,4 @@
1
1
  //#region package.json
2
- var e = "0.1.4";
2
+ var e = "0.1.5";
3
3
  //#endregion
4
4
  export { e as version };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@czxingyu/xycomponents",
3
- "version": "0.1.4",
3
+ "version": "0.1.5",
4
4
  "bin": {
5
5
  "xycomponents": "dist/cli.js"
6
6
  },
@@ -9,7 +9,8 @@
9
9
  "components/style/*.css",
10
10
  "docs/maintenance/migrations/*.md",
11
11
  "global.d.ts",
12
- "skills"
12
+ "skills",
13
+ "scripts/postinstall-skills.mjs"
13
14
  ],
14
15
  "type": "module",
15
16
  "sideEffects": [
@@ -161,6 +162,7 @@
161
162
  "fmt:check": "oxfmt --check",
162
163
  "generate:component": "node scripts/generate-component.mjs",
163
164
  "lint": "oxlint .",
165
+ "postinstall": "node scripts/postinstall-skills.mjs",
164
166
  "check": "pnpm run fmt:check && pnpm run lint && pnpm run type-check",
165
167
  "ci": "pnpm run check && pnpm test && pnpm run audit:components && pnpm run test:e2e && pnpm run build && pnpm run check:esm-import && pnpm run check:umd-contract && pnpm run check:bundle && pnpm run check:package && pnpm run check:packed-consumer",
166
168
  "release": "pnpm run ci && changeset publish",
@@ -0,0 +1,30 @@
1
+ import { spawnSync } from "node:child_process";
2
+ import { existsSync } from "node:fs";
3
+ import { dirname, join } from "node:path";
4
+ import { fileURLToPath } from "node:url";
5
+
6
+ const packageRoot = join(dirname(fileURLToPath(import.meta.url)), "..");
7
+ const cliEntry = join(packageRoot, "dist", "cli.js");
8
+ const projectRoot = process.env.INIT_CWD || process.cwd();
9
+
10
+ if (process.env.XYCOMPONENTS_SKIP_SKILLS_INSTALL === "1") {
11
+ process.exit(0);
12
+ }
13
+
14
+ if (!existsSync(cliEntry)) {
15
+ process.exit(0);
16
+ }
17
+
18
+ const result = spawnSync(
19
+ process.execPath,
20
+ [cliEntry, "skills", "install", "--consumer", "--json"],
21
+ {
22
+ cwd: projectRoot,
23
+ encoding: "utf8",
24
+ env: process.env,
25
+ },
26
+ );
27
+
28
+ if (result.status !== 0) {
29
+ process.exit(0);
30
+ }
package/skills/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # xycomponents AI Skills
2
2
 
3
- 面向 Cursor AI AgentSkill,配合项目内安装的 `@czxingyu/xycomponents` 使用。
3
+ 面向 Cursor、Claude Code、Codex 与其他读取 `AGENTS.md`Agent。配合项目内安装的 `@czxingyu/xycomponents` 使用。
4
4
 
5
5
  ## 原则
6
6
 
@@ -8,12 +8,58 @@
8
8
  - **不要全局安装** CLI,避免 AI 查到与项目不一致的 API。
9
9
  - **Bug / 新组件**:业务项目 AI 用 `xycomponents-contribute` 提交 GitHub Issue;组件库维护者用 `xycomponents-maintainer` 集中分诊与修复。
10
10
 
11
+ ## 自动安装(推荐)
12
+
13
+ 安装组件库后,Skill 会**自动**写入当前项目(可用环境变量跳过):
14
+
15
+ ```bash
16
+ pnpm add @czxingyu/xycomponents
17
+ # postinstall 会自动执行:pnpm exec xycomponents skills install --consumer --json
18
+ ```
19
+
20
+ 跳过自动安装:
21
+
22
+ ```bash
23
+ XYCOMPONENTS_SKIP_SKILLS_INSTALL=1 pnpm add @czxingyu/xycomponents
24
+ ```
25
+
26
+ 手动重装 / 升级后同步 Skill:
27
+
28
+ ```bash
29
+ pnpm exec xycomponents skills install --consumer --json
30
+ ```
31
+
32
+ 维护者额外安装 maintainer skill:
33
+
34
+ ```bash
35
+ pnpm exec xycomponents skills install --maintainer --json
36
+ ```
37
+
38
+ ## 支持的 Agent 目录
39
+
40
+ | 目标 | 目录 | 典型工具 |
41
+ | ----------- | ----------------- | ----------------------------------- |
42
+ | `cursor` | `.cursor/skills/` | Cursor |
43
+ | `claude` | `.claude/skills/` | Claude Code |
44
+ | `codex` | `.codex/skills/` | Codex |
45
+ | `agents` | `.agents/skills/` | 通用 Agent 技能目录 |
46
+ | `AGENTS.md` | 项目根目录 | ChatGPT / 其他读取 AGENTS.md 的工具 |
47
+
48
+ 默认 `--target all` 会写入以上全部目录,并更新 `AGENTS.md` 引导块。
49
+
50
+ 只装 Cursor:
51
+
52
+ ```bash
53
+ pnpm exec xycomponents skills install --consumer --target cursor
54
+ ```
55
+
11
56
  ## 完整闭环
12
57
 
13
58
  ```text
14
59
  业务项目 组件库仓库 (vue3components)
15
60
  ──────── ──────────────────────────
16
61
  pnpm add @czxingyu/xycomponents
62
+ └─ postinstall / skills install
17
63
  pnpm exec xycomponents ... ──► 查用法 / API
18
64
 
19
65
  ▼ Bug 或 Feature
@@ -24,21 +70,6 @@ gh issue create (contribute) ──► needs-triage 队列
24
70
  pnpm add @新版本 ◄─────────────── 关闭 Issue,注明版本
25
71
  ```
26
72
 
27
- ## 安装 Skill 到业务项目
28
-
29
- 复制 **`xycomponents-shared`**、**`xycomponents-cli`**、**`xycomponents-contribute`** 到 `.cursor/skills/`。
30
-
31
- ```bash
32
- pnpm add @czxingyu/xycomponents
33
- cp -r node_modules/@czxingyu/xycomponents/skills/xycomponents-shared .cursor/skills/
34
- cp -r node_modules/@czxingyu/xycomponents/skills/xycomponents-cli .cursor/skills/
35
- cp -r node_modules/@czxingyu/xycomponents/skills/xycomponents-contribute .cursor/skills/
36
- ```
37
-
38
- 本仓库维护者额外启用 **`xycomponents-maintainer`**(已在 `.cursor/skills/`)。
39
-
40
- 提交 Issue 需本机安装 [GitHub CLI](https://cli.github.com/) 并 `gh auth login`。
41
-
42
73
  ## Skill 列表
43
74
 
44
75
  | Skill | 谁用 | 用途 |
@@ -48,6 +79,8 @@ cp -r node_modules/@czxingyu/xycomponents/skills/xycomponents-contribute .cursor
48
79
  | [xycomponents-contribute](./xycomponents-contribute/SKILL.md) | 业务项目 | 提交 Bug / Feature Issue |
49
80
  | [xycomponents-maintainer](./xycomponents-maintainer/SKILL.md) | 组件库维护者 | 拉取 Issue、分诊、修复、发版 |
50
81
 
82
+ 提交 Issue 需本机安装 [GitHub CLI](https://cli.github.com/) 并 `gh auth login`。
83
+
51
84
  ## GitHub Issue 模板
52
85
 
53
86
  | 模板 | 标签 | 场景 |
@@ -57,8 +90,9 @@ cp -r node_modules/@czxingyu/xycomponents/skills/xycomponents-contribute .cursor
57
90
 
58
91
  用法问题优先 [Discussions](https://github.com/czhang31795/vue3components/discussions)。
59
92
 
60
- ## 验证 CLI
93
+ ## 验证
61
94
 
62
95
  ```bash
63
96
  pnpm exec xycomponents doctor --json
97
+ pnpm exec xycomponents skills install --consumer --dry-run --json
64
98
  ```
@@ -15,6 +15,8 @@ metadata:
15
15
  ## 版本与 CLI 策略(必须遵守)
16
16
 
17
17
  - **只在当前项目内**安装 `@czxingyu/xycomponents`;**不要**全局安装 CLI,也不要用与项目 `package.json` 版本不一致的全局命令。
18
+ - 安装组件库时会**自动**写入 Agent Skill(Cursor / Claude Code / Codex / `.agents/skills/` + `AGENTS.md`)。跳过:`XYCOMPONENTS_SKIP_SKILLS_INSTALL=1 pnpm add ...`
19
+ - 手动重装或升级后同步:`pnpm exec xycomponents skills install --consumer --json`
18
20
  - CLI 元数据随 npm 包一起发布;**CLI 版本 = 已安装的包版本**。
19
21
  - 升级组件库时重新安装,CLI 会同步更新:
20
22