@expcat/tigercat-core 2.1.4 → 2.2.0

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.
Files changed (50) hide show
  1. package/dist/{data-export-D01yjggE.d.ts → data-export-dxdDe47U.d.ts} +1 -1
  2. package/dist/datepicker-locales/ar-SA.d.ts +1 -1
  3. package/dist/datepicker-locales/de-DE.d.ts +1 -1
  4. package/dist/datepicker-locales/en-US.d.ts +1 -1
  5. package/dist/datepicker-locales/es-ES.d.ts +1 -1
  6. package/dist/datepicker-locales/fr-FR.d.ts +1 -1
  7. package/dist/datepicker-locales/id-ID.d.ts +1 -1
  8. package/dist/datepicker-locales/ja-JP.d.ts +1 -1
  9. package/dist/datepicker-locales/ko-KR.d.ts +1 -1
  10. package/dist/datepicker-locales/pt-BR.d.ts +1 -1
  11. package/dist/datepicker-locales/registry.d.ts +1 -1
  12. package/dist/datepicker-locales/th-TH.d.ts +1 -1
  13. package/dist/datepicker-locales/vi-VN.d.ts +1 -1
  14. package/dist/datepicker-locales/zh-CN.d.ts +1 -1
  15. package/dist/datepicker-locales/zh-TW.d.ts +1 -1
  16. package/dist/icons/registry.d.ts +23 -3
  17. package/dist/icons/registry.js +54 -17
  18. package/dist/index.d.ts +289 -141
  19. package/dist/index.js +300 -32
  20. package/dist/{locale-qoiGEqe_.d.ts → locale-B_jkaex_.d.ts} +38 -1
  21. package/dist/locales/ar-SA.d.ts +1 -1
  22. package/dist/locales/ar-SA.js +6 -1
  23. package/dist/locales/de-DE.d.ts +1 -1
  24. package/dist/locales/de-DE.js +6 -1
  25. package/dist/locales/en-US.d.ts +1 -1
  26. package/dist/locales/en-US.js +6 -1
  27. package/dist/locales/es-ES.d.ts +1 -1
  28. package/dist/locales/es-ES.js +6 -1
  29. package/dist/locales/fr-FR.d.ts +1 -1
  30. package/dist/locales/fr-FR.js +6 -1
  31. package/dist/locales/id-ID.d.ts +1 -1
  32. package/dist/locales/id-ID.js +6 -1
  33. package/dist/locales/ja-JP.d.ts +1 -1
  34. package/dist/locales/ja-JP.js +6 -1
  35. package/dist/locales/ko-KR.d.ts +1 -1
  36. package/dist/locales/ko-KR.js +6 -1
  37. package/dist/locales/pt-BR.d.ts +1 -1
  38. package/dist/locales/pt-BR.js +6 -1
  39. package/dist/locales/th-TH.d.ts +1 -1
  40. package/dist/locales/th-TH.js +6 -1
  41. package/dist/locales/vi-VN.d.ts +1 -1
  42. package/dist/locales/vi-VN.js +6 -1
  43. package/dist/locales/zh-CN.d.ts +1 -1
  44. package/dist/locales/zh-CN.js +6 -1
  45. package/dist/locales/zh-TW.d.ts +1 -1
  46. package/dist/locales/zh-TW.js +6 -1
  47. package/dist/{table-R9Yp1aVa.d.ts → table-GjUkOiNr.d.ts} +1 -1
  48. package/dist/utils/data-export.d.ts +3 -3
  49. package/dist/utils/table-export.d.ts +2 -2
  50. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -973,7 +973,39 @@ function resolveSelector(selector) {
973
973
  getRect: () => elementRect(el)
974
974
  };
975
975
  }
976
- function resolveScrollRoot(input, depth = 0) {
976
+ var OVERFLOW_RE = /(auto|scroll|overlay)/;
977
+ function findNearestOverflowAncestor(from) {
978
+ if (!from || !isBrowser()) return null;
979
+ let node = from.parentElement;
980
+ while (node && node !== document.documentElement && node !== document.body) {
981
+ let style;
982
+ try {
983
+ style = getComputedStyle(node);
984
+ } catch {
985
+ node = node.parentElement;
986
+ continue;
987
+ }
988
+ const html = node;
989
+ const overflowY = style.overflowY || html.style.overflowY || style.overflow || html.style.overflow;
990
+ const overflowX = style.overflowX || html.style.overflowX || style.overflow || html.style.overflow;
991
+ if (OVERFLOW_RE.test(overflowY) || OVERFLOW_RE.test(overflowX)) {
992
+ return node;
993
+ }
994
+ node = node.parentElement;
995
+ }
996
+ return null;
997
+ }
998
+ function fromElementRoot(from) {
999
+ const ancestor = findNearestOverflowAncestor(from);
1000
+ if (!ancestor) return createWindowScrollRoot();
1001
+ return {
1002
+ target: ancestor,
1003
+ isWindow: false,
1004
+ getRect: () => elementRect(ancestor)
1005
+ };
1006
+ }
1007
+ function resolveScrollRoot(input, options = {}) {
1008
+ const depth = options.depth ?? 0;
977
1009
  if (depth > MAX_GETTER_DEPTH) {
978
1010
  devWarn(
979
1011
  "scrollRoot.cycle",
@@ -981,12 +1013,15 @@ function resolveScrollRoot(input, depth = 0) {
981
1013
  );
982
1014
  return createWindowScrollRoot();
983
1015
  }
984
- if (input === void 0 || input === null) {
1016
+ if (input === void 0) {
1017
+ return fromElementRoot(options.from);
1018
+ }
1019
+ if (input === null) {
985
1020
  return createWindowScrollRoot();
986
1021
  }
987
1022
  if (typeof input === "function") {
988
1023
  try {
989
- return resolveScrollRoot(input(), depth + 1);
1024
+ return resolveScrollRoot(input(), { ...options, depth: depth + 1 });
990
1025
  } catch {
991
1026
  devWarn("scrollRoot.getter", "[Tigercat] Scroll target getter threw. Falling back to window.");
992
1027
  return createWindowScrollRoot();
@@ -2397,11 +2432,53 @@ var iconRegistry = {
2397
2432
  users: stroke24(
2398
2433
  "M15 19.128a9.38 9.38 0 0 0 2.625.372 9.337 9.337 0 0 0 4.121-.952 4.125 4.125 0 0 0-7.533-2.493M15 19.128v-.003c0-1.113-.285-2.16-.786-3.07M15 19.128v.106A12.318 12.318 0 0 1 8.624 21c-2.331 0-4.512-.645-6.374-1.766l-.001-.109a6.375 6.375 0 0 1 11.964-3.07M12 6.375a3.375 3.375 0 1 1-6.75 0 3.375 3.375 0 0 1 6.75 0Zm8.25 2.25a2.625 2.625 0 1 1-5.25 0 2.625 2.625 0 0 1 5.25 0Z"
2399
2434
  ),
2400
- dashboard: squares2x2
2435
+ dashboard: squares2x2,
2436
+ // --- Admin / shell glyphs (Heroicons-style, 24x24) ---
2437
+ fullscreen: stroke24(
2438
+ "M3.75 3.75v4.5m0-4.5h4.5m-4.5 0L9 9M3.75 20.25v-4.5m0 4.5h4.5m-4.5 0L9 15M20.25 3.75h-4.5m4.5 0v4.5m0-4.5L15 9m5.25 11.25h-4.5m4.5 0v-4.5m0 4.5L15 15"
2439
+ ),
2440
+ "fullscreen-exit": stroke24(
2441
+ "M9 9V4.5M9 9H4.5M9 9 3.75 3.75M9 15v4.5M9 15H4.5M9 15l-5.25 5.25M15 9h4.5M15 9V4.5M15 9l5.25-5.25M15 15h4.5M15 15v4.5m0-4.5 5.25 5.25"
2442
+ ),
2443
+ ticket: stroke24(
2444
+ "M16.5 6v.75m0 3v.75m0 3v.75m0 3V18m-9-5.25h5.25M7.5 15h3M3.375 5.25c-.621 0-1.125.504-1.125 1.125v3.026a2.999 2.999 0 0 1 0 5.198v3.026c0 .621.504 1.125 1.125 1.125h17.25c.621 0 1.125-.504 1.125-1.125v-3.026a2.999 2.999 0 0 1 0-5.198V6.375c0-.621-.504-1.125-1.125-1.125H3.375Z"
2445
+ ),
2446
+ bolt: stroke24("m3.75 13.5 10.5-11.25L12 10.5h8.25L9.75 21.75 12 13.5H3.75Z"),
2447
+ zap: stroke24("m3.75 13.5 10.5-11.25L12 10.5h8.25L9.75 21.75 12 13.5H3.75Z"),
2448
+ "chart-bar": stroke24(
2449
+ "M3 13.125C3 12.504 3.504 12 4.125 12h2.25c.621 0 1.125.504 1.125 1.125v6.75C7.5 20.496 6.996 21 6.375 21h-2.25A1.125 1.125 0 0 1 3 19.875v-6.75ZM9.75 8.625c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125v11.25c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125V8.625ZM16.5 4.125c0-.621.504-1.125 1.125-1.125h2.25C20.496 3 21 3.504 21 4.125v15.75c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125V4.125Z"
2450
+ ),
2451
+ chart: stroke24(
2452
+ "M3 13.125C3 12.504 3.504 12 4.125 12h2.25c.621 0 1.125.504 1.125 1.125v6.75C7.5 20.496 6.996 21 6.375 21h-2.25A1.125 1.125 0 0 1 3 19.875v-6.75ZM9.75 8.625c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125v11.25c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125V8.625ZM16.5 4.125c0-.621.504-1.125 1.125-1.125h2.25C20.496 3 21 3.504 21 4.125v15.75c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125V4.125Z"
2453
+ ),
2454
+ database: stroke24(
2455
+ "M20.25 6.375c0 2.278-3.694 4.125-8.25 4.125S3.75 8.653 3.75 6.375m16.5 0c0-2.278-3.694-4.125-8.25-4.125S3.75 4.097 3.75 6.375m16.5 0v11.25c0 2.278-3.694 4.125-8.25 4.125s-8.25-1.847-8.25-4.125V6.375m16.5 0v3.75m-16.5-3.75v3.75m16.5 0v3.75C20.25 16.153 16.556 18 12 18s-8.25-1.847-8.25-4.125v-3.75m16.5 0c0 2.278-3.694 4.125-8.25 4.125s-8.25-1.847-8.25-4.125"
2456
+ )
2401
2457
  };
2402
2458
  var iconNames = Object.keys(iconRegistry);
2459
+ var customIconRegistry = /* @__PURE__ */ new Map();
2403
2460
  function getIconDefinition(name) {
2404
- return iconRegistry[name];
2461
+ return iconRegistry[name] ?? customIconRegistry.get(name);
2462
+ }
2463
+ function registerIcon(name, definition) {
2464
+ const trimmed = name.trim();
2465
+ if (!trimmed) return;
2466
+ if (iconRegistry[trimmed]) return;
2467
+ customIconRegistry.set(trimmed, definition);
2468
+ }
2469
+ function registerIcons(icons) {
2470
+ for (const [name, definition] of Object.entries(icons)) {
2471
+ registerIcon(name, definition);
2472
+ }
2473
+ }
2474
+ function unregisterIcon(name) {
2475
+ customIconRegistry.delete(name);
2476
+ }
2477
+ function clearRegisteredIcons() {
2478
+ customIconRegistry.clear();
2479
+ }
2480
+ function registeredIconNames() {
2481
+ return Array.from(customIconRegistry.keys());
2405
2482
  }
2406
2483
  var sortAscendingIcon = /* @__PURE__ */ stroke24(
2407
2484
  "M3 4.5h14.25M3 9h9.75M3 13.5h5.25m5.25-.75L17.25 9m0 0L21 12.75M17.25 9v12"
@@ -2413,12 +2490,8 @@ var listIcon = /* @__PURE__ */ stroke24(
2413
2490
  "M8.25 6.75h12M8.25 12h12m-12 5.25h12M3.75 6.75h.007v.008H3.75V6.75Zm.375 0a.375.375 0 1 1-.75 0 .375.375 0 0 1 .75 0ZM3.75 12h.007v.008H3.75V12Zm.375 0a.375.375 0 1 1-.75 0 .375.375 0 0 1 .75 0Zm-.375 5.25h.007v.008H3.75v-.008Zm.375 0a.375.375 0 1 1-.75 0 .375.375 0 0 1 .75 0Z"
2414
2491
  );
2415
2492
  var gridIcon = squares2x2;
2416
- var fullscreenIcon = /* @__PURE__ */ stroke24(
2417
- "M3.75 3.75v4.5m0-4.5h4.5m-4.5 0L9 9M3.75 20.25v-4.5m0 4.5h4.5m-4.5 0L9 15M20.25 3.75h-4.5m4.5 0v4.5m0-4.5L15 9m5.25 11.25h-4.5m4.5 0v-4.5m0 4.5L15 15"
2418
- );
2419
- var fullscreenExitIcon = /* @__PURE__ */ stroke24(
2420
- "M9 9V4.5M9 9H4.5M9 9 3.75 3.75M9 15v4.5M9 15H4.5M9 15l-5.25 5.25M15 9h4.5M15 9V4.5M15 9l5.25-5.25M15 15h4.5M15 15v4.5m0-4.5 5.25 5.25"
2421
- );
2493
+ var fullscreenIcon = iconRegistry.fullscreen;
2494
+ var fullscreenExitIcon = iconRegistry["fullscreen-exit"];
2422
2495
  var zoomInIcon = /* @__PURE__ */ stroke24(
2423
2496
  "m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607ZM10.5 7.5v6m3-3h-6"
2424
2497
  );
@@ -2465,9 +2538,7 @@ var archiveIcon = /* @__PURE__ */ stroke24(
2465
2538
  var inboxIcon = /* @__PURE__ */ stroke24(
2466
2539
  "M2.25 13.5h3.86a2.25 2.25 0 0 1 2.012 1.244l.256.512a2.25 2.25 0 0 0 2.013 1.244h3.218a2.25 2.25 0 0 0 2.013-1.244l.256-.512a2.25 2.25 0 0 1 2.013-1.244h3.859m-19.5.338V18a2.25 2.25 0 0 0 2.25 2.25h15A2.25 2.25 0 0 0 21.75 18v-4.162c0-.224-.034-.447-.1-.661L19.24 5.338a2.25 2.25 0 0 0-2.15-1.588H6.911a2.25 2.25 0 0 0-2.15 1.588L2.35 13.177a2.25 2.25 0 0 0-.1.661Z"
2467
2540
  );
2468
- var boltIcon = /* @__PURE__ */ stroke24(
2469
- "m3.75 13.5 10.5-11.25L12 10.5h8.25L9.75 21.75 12 13.5H3.75Z"
2470
- );
2541
+ var boltIcon = iconRegistry.bolt;
2471
2542
  var chatIcon = /* @__PURE__ */ stroke24(
2472
2543
  "M20.25 8.511c.884.284 1.5 1.128 1.5 2.097v4.286c0 1.136-.847 2.1-1.98 2.193-.34.027-.68.052-1.02.072v3.091l-3-3c-1.354 0-2.694-.055-4.02-.163a2.115 2.115 0 0 1-.825-.242m9.345-8.334a2.126 2.126 0 0 0-.476-.095 48.64 48.64 0 0 0-8.048 0c-1.131.094-1.976 1.057-1.976 2.192v4.286c0 .837.46 1.58 1.155 1.951m9.345-8.334V6.637c0-1.621-1.152-3.026-2.76-3.235A48.455 48.455 0 0 0 11.25 3c-2.115 0-4.198.137-6.24.402-1.608.209-2.76 1.614-2.76 3.235v6.226c0 1.621 1.152 3.026 2.76 3.235.577.075 1.157.14 1.74.194V21l4.155-4.155"
2473
2544
  );
@@ -2527,16 +2598,12 @@ var currencyDollarIcon = /* @__PURE__ */ stroke24(
2527
2598
  var walletIcon = /* @__PURE__ */ stroke24(
2528
2599
  "M21 12a2.25 2.25 0 0 0-2.25-2.25H15a3 3 0 1 1-6 0H5.25A2.25 2.25 0 0 0 3 12m18 0v6a2.25 2.25 0 0 1-2.25 2.25H5.25A2.25 2.25 0 0 1 3 18v-6m18 0V9M3 12V9m18 0a2.25 2.25 0 0 0-2.25-2.25H5.25A2.25 2.25 0 0 0 3 9m18 0V6a2.25 2.25 0 0 0-2.25-2.25H5.25A2.25 2.25 0 0 0 3 6v3"
2529
2600
  );
2530
- var chartBarIcon = /* @__PURE__ */ stroke24(
2531
- "M3 13.125C3 12.504 3.504 12 4.125 12h2.25c.621 0 1.125.504 1.125 1.125v6.75C7.5 20.496 6.996 21 6.375 21h-2.25A1.125 1.125 0 0 1 3 19.875v-6.75ZM9.75 8.625c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125v11.25c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125V8.625ZM16.5 4.125c0-.621.504-1.125 1.125-1.125h2.25C20.496 3 21 3.504 21 4.125v15.75c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125V4.125Z"
2532
- );
2601
+ var chartBarIcon = iconRegistry["chart-bar"];
2533
2602
  var chartPieIcon = /* @__PURE__ */ stroke24(
2534
2603
  "M10.5 6a7.5 7.5 0 1 0 7.5 7.5h-7.5V6Z",
2535
2604
  "M13.5 10.5H21A7.5 7.5 0 0 0 13.5 3v7.5Z"
2536
2605
  );
2537
- var databaseIcon = /* @__PURE__ */ stroke24(
2538
- "M20.25 6.375c0 2.278-3.694 4.125-8.25 4.125S3.75 8.653 3.75 6.375m16.5 0c0-2.278-3.694-4.125-8.25-4.125S3.75 4.097 3.75 6.375m16.5 0v11.25c0 2.278-3.694 4.125-8.25 4.125s-8.25-1.847-8.25-4.125V6.375m16.5 0v3.75m-16.5-3.75v3.75m16.5 0v3.75C20.25 16.153 16.556 18 12 18s-8.25-1.847-8.25-4.125v-3.75m16.5 0c0 2.278-3.694 4.125-8.25 4.125s-8.25-1.847-8.25-4.125"
2539
- );
2606
+ var databaseIcon = iconRegistry.database;
2540
2607
  var serverIcon = /* @__PURE__ */ stroke24(
2541
2608
  "M21.75 17.25v-.228a4.5 4.5 0 0 0-.12-1.03l-2.268-9.64a3.375 3.375 0 0 0-3.285-2.602H7.923a3.375 3.375 0 0 0-3.285 2.602l-2.268 9.64a4.5 4.5 0 0 0-.12 1.03v.228m19.5 0a3 3 0 0 1-3 3H5.25a3 3 0 0 1-3-3m19.5 0a3 3 0 0 0-3-3H5.25a3 3 0 0 0-3 3m16.5 0h.008v.008h-.008v-.008Zm-3 0h.008v.008h-.008v-.008Z"
2542
2609
  );
@@ -2868,6 +2935,7 @@ var TIGER_LOCALE_KEY_SET = {
2868
2935
  formWizard: true,
2869
2936
  tour: true,
2870
2937
  calendar: true,
2938
+ fullscreen: true,
2871
2939
  fileManager: true,
2872
2940
  imageViewer: true,
2873
2941
  imageEditor: true,
@@ -3153,7 +3221,12 @@ var enUS = {
3153
3221
  previousMonth: "Previous month",
3154
3222
  nextMonth: "Next month",
3155
3223
  previousYear: "Previous year",
3156
- nextYear: "Next year"
3224
+ nextYear: "Next year",
3225
+ eventCountText: "{n} events"
3226
+ },
3227
+ fullscreen: {
3228
+ enterAriaLabel: "Enter fullscreen",
3229
+ exitAriaLabel: "Exit fullscreen"
3157
3230
  },
3158
3231
  fileManager: {
3159
3232
  rootText: "Root",
@@ -3740,6 +3813,9 @@ function getAnchorLabels(locale, overrides) {
3740
3813
  function getFloatButtonLabels(locale, overrides) {
3741
3814
  return resolveLocaleSection(enSection("floatButton"), locale?.floatButton, overrides);
3742
3815
  }
3816
+ function getFullscreenLabels(locale, overrides) {
3817
+ return resolveLocaleSection(enSection("fullscreen"), locale?.fullscreen, overrides);
3818
+ }
3743
3819
  function getSpotlightLabels(locale, overrides) {
3744
3820
  return resolveLocaleSection(enSection("spotlight"), locale?.spotlight, overrides);
3745
3821
  }
@@ -7826,6 +7902,9 @@ var LAYOUT_GRID_CSS = `
7826
7902
  border-top: 1px solid var(--tiger-border, #e5e7eb);
7827
7903
  padding: 1rem;
7828
7904
  }
7905
+ .tiger-footer-compact {
7906
+ padding-block: 0.5rem;
7907
+ }
7829
7908
 
7830
7909
  .tiger-container {
7831
7910
  width: 100%;
@@ -8295,6 +8374,11 @@ function getLayoutContentClasses(padding = true) {
8295
8374
  );
8296
8375
  }
8297
8376
  var layoutFooterClasses = "tiger-footer";
8377
+ var layoutFooterCompactClasses = "tiger-footer-compact";
8378
+ function getLayoutFooterClasses(size2 = "default") {
8379
+ injectLayoutGridStyles();
8380
+ return classNames(layoutFooterClasses, size2 === "compact" && layoutFooterCompactClasses);
8381
+ }
8298
8382
  var LAYOUT_CONTENT_TAGS = ["main", "div", "section", "article"];
8299
8383
  var LAYOUT_FOOTER_TAGS = ["footer", "div"];
8300
8384
  var CONTAINER_TAGS = [
@@ -11475,6 +11559,15 @@ function resolveMenuCollapsed(mode, collapsed) {
11475
11559
  }
11476
11560
  return true;
11477
11561
  }
11562
+ function shouldShowMenuSearch(searchable, collapsed) {
11563
+ if (!searchable) return false;
11564
+ if (collapsed) return false;
11565
+ return searchable === true || searchable === "auto";
11566
+ }
11567
+ function resolveMenuSearchQuery(searchable, collapsed, searchValue) {
11568
+ if (collapsed && (searchable === true || searchable === "auto")) return "";
11569
+ return searchValue;
11570
+ }
11478
11571
  function isSubmenuPopup(mode, collapsed) {
11479
11572
  return mode === "horizontal" || mode === "vertical" && collapsed;
11480
11573
  }
@@ -14006,6 +14099,23 @@ function createCopyStatusReset(setStatus, resetMs = CODE_COPY_STATUS_RESET_MS) {
14006
14099
  dispose
14007
14100
  };
14008
14101
  }
14102
+ function renderCodeHighlightHtml(code, language, highlighter) {
14103
+ if (!highlighter) return null;
14104
+ const lang = language ?? "plain";
14105
+ if (highlighter.highlightCode) {
14106
+ return highlighter.highlightCode(code, lang, "light");
14107
+ }
14108
+ if (highlighter.highlightLine) {
14109
+ const lines = code.split("\n");
14110
+ const parts = [];
14111
+ for (let i = 0; i < lines.length; i++) {
14112
+ if (i > 0) parts.push("\n");
14113
+ parts.push(highlighter.highlightLine(lines[i], lang, "light"));
14114
+ }
14115
+ return parts.join("");
14116
+ }
14117
+ return null;
14118
+ }
14009
14119
 
14010
14120
  // src/types/text.ts
14011
14121
  var TEXT_TAGS = [
@@ -14070,12 +14180,29 @@ function getTextClasses(props) {
14070
14180
  textWeightClasses[weight],
14071
14181
  align && textAlignClasses[align],
14072
14182
  textColorClasses[color],
14073
- props.truncate && textDecorationClasses.truncate,
14183
+ props.truncate && !isTextCopyable(props.copyable) && textDecorationClasses.truncate,
14074
14184
  props.italic && textDecorationClasses.italic,
14075
14185
  props.underline && textDecorationClasses.underline,
14076
14186
  props.lineThrough && textDecorationClasses.lineThrough
14077
14187
  );
14078
14188
  }
14189
+ function isTextCopyable(copyable) {
14190
+ if (copyable === true) return true;
14191
+ return Boolean(copyable) && typeof copyable === "object";
14192
+ }
14193
+ function resolveTextCopyableOptions(copyable) {
14194
+ if (copyable === true) return {};
14195
+ if (copyable && typeof copyable === "object") return copyable;
14196
+ return null;
14197
+ }
14198
+ function resolveTextCopyContent(options, fallback) {
14199
+ if (options && typeof options.text === "string") return options.text;
14200
+ return fallback;
14201
+ }
14202
+ var textCopyableRootClasses = "inline-flex max-w-full items-center gap-1";
14203
+ var textCopyableBodyClasses = "min-w-0";
14204
+ var textCopyableButtonClasses = "inline-flex shrink-0 items-center justify-center min-h-6 min-w-6 rounded-[var(--tiger-radius-md,0.5rem)] text-[var(--tiger-text-muted,#6b7280)] hover:bg-[var(--tiger-surface-muted,#f3f4f6)] hover:text-[var(--tiger-text,#111827)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--tiger-focus-ring,var(--tiger-primary,#2563eb))]/40";
14205
+ var textCopyableLiveClasses = "sr-only";
14079
14206
 
14080
14207
  // src/types/kbd.ts
14081
14208
  var DEFAULT_KBD_SEPARATOR = "+";
@@ -15770,8 +15897,8 @@ function getElementOffsetTop(element, container) {
15770
15897
  const containerEl = container;
15771
15898
  return element.getBoundingClientRect().top - containerEl.getBoundingClientRect().top + containerEl.scrollTop;
15772
15899
  }
15773
- function resolveAnchorScrollContainer(input) {
15774
- const root = resolveScrollRoot(input);
15900
+ function resolveAnchorScrollContainer(input, from) {
15901
+ const root = resolveScrollRoot(input, { from });
15775
15902
  if (!root.target || root.isWindow) return isBrowser() ? window : null;
15776
15903
  return root.target;
15777
15904
  }
@@ -19845,7 +19972,9 @@ function createAffixController(options) {
19845
19972
  const pinFromFlow = (emitChange) => {
19846
19973
  const flow = getFlowRect();
19847
19974
  if (!flow) return;
19848
- const root = resolved ?? resolveScrollRoot(options.getTarget());
19975
+ const root = resolved ?? resolveScrollRoot(options.getTarget(), {
19976
+ from: options.getContent() ?? options.getSentinel()
19977
+ });
19849
19978
  const style = buildAffixStyle(
19850
19979
  flow,
19851
19980
  root.getRect(),
@@ -19914,7 +20043,9 @@ function createAffixController(options) {
19914
20043
  if (!isBrowser()) return;
19915
20044
  const sentinel = options.getSentinel();
19916
20045
  if (!sentinel) return;
19917
- resolved = resolveScrollRoot(options.getTarget());
20046
+ resolved = resolveScrollRoot(options.getTarget(), {
20047
+ from: options.getContent() ?? options.getSentinel()
20048
+ });
19918
20049
  const root = resolved.isWindow ? null : resolved.target;
19919
20050
  if (typeof IntersectionObserver === "undefined") {
19920
20051
  const onScrollLayout = () => {
@@ -23208,8 +23339,8 @@ function scrollToScrollSpyItem(item, container, targetOffset = 0) {
23208
23339
  if (item.disabled) return;
23209
23340
  scrollToAnchor(item.href, container, targetOffset);
23210
23341
  }
23211
- function resolveScrollSpyContainer(input) {
23212
- const root = resolveScrollRoot(input);
23342
+ function resolveScrollSpyContainer(input, from) {
23343
+ const root = resolveScrollRoot(input, { from });
23213
23344
  if (!root.target || root.isWindow) return isBrowser() ? window : null;
23214
23345
  return root.target;
23215
23346
  }
@@ -23235,7 +23366,7 @@ function createScrollSpyObserver(items = [], options) {
23235
23366
  if (!itemByHref.has(item.href)) itemByHref.set(item.href, item);
23236
23367
  }
23237
23368
  const offset2 = resolveScrollSpyOffset(options.targetOffset, options.offsetTop);
23238
- const container = resolveScrollSpyContainer(options.container);
23369
+ const container = resolveScrollSpyContainer(options.container, options.from);
23239
23370
  const root = container === window ? null : container;
23240
23371
  return createAnchorObserver(hrefs, {
23241
23372
  offsetTop: offset2,
@@ -24432,6 +24563,10 @@ function clampStepperValue(value, min, max, precision, step) {
24432
24563
  }
24433
24564
 
24434
24565
  // src/utils/calendar-utils.ts
24566
+ function eventIso(value) {
24567
+ const date = toCalendarDate(value);
24568
+ return date ? formatDate(date, "yyyy-MM-dd") : null;
24569
+ }
24435
24570
  var FOCUS_RING3 = "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--tiger-focus-ring,var(--tiger-primary,#2563eb))]/40";
24436
24571
  function getCalendarContainerClasses(fullscreen) {
24437
24572
  return classNames(
@@ -24471,11 +24606,13 @@ function getCalendarDayClasses(state) {
24471
24606
  isActive,
24472
24607
  isInRange,
24473
24608
  isRangeStart,
24474
- isRangeEnd
24609
+ isRangeEnd,
24610
+ hasExtra
24475
24611
  } = state;
24476
24612
  const selected = isSelected || isRangeStart || isRangeEnd;
24477
24613
  return classNames(
24478
- "inline-flex items-center justify-center w-8 h-8 rounded-full text-sm",
24614
+ "inline-flex items-center justify-center w-8 text-sm",
24615
+ hasExtra ? "h-auto min-h-8 flex-col gap-0.5 rounded-[var(--tiger-radius-md,0.5rem)] py-0.5" : "h-8 rounded-full",
24479
24616
  "tiger-motion-aware [transition:var(--tiger-transition-base,color_150ms_ease)]",
24480
24617
  "justify-self-center my-0.5",
24481
24618
  FOCUS_RING3,
@@ -24485,6 +24622,39 @@ function getCalendarDayClasses(state) {
24485
24622
  isActive && !selected && "ring-1 ring-inset ring-[var(--tiger-primary,#2563eb)]"
24486
24623
  );
24487
24624
  }
24625
+ var calendarDateCellExtraClasses = "flex max-w-full flex-wrap items-center justify-center gap-0.5";
24626
+ var calendarDateCellDotClasses = "h-1.5 w-1.5 shrink-0 rounded-full";
24627
+ function getCalendarEventDotStyle(color) {
24628
+ return { backgroundColor: color?.trim() || "var(--tiger-primary, #2563eb)" };
24629
+ }
24630
+ function getCalendarEventsForDate(events, date) {
24631
+ if (!events || events.length === 0) return [];
24632
+ const iso = formatDate(date, "yyyy-MM-dd");
24633
+ const matched = [];
24634
+ for (const event of events) {
24635
+ if (eventIso(event.date) === iso) matched.push(event);
24636
+ }
24637
+ return matched;
24638
+ }
24639
+ function buildCalendarDateCellExtra(options) {
24640
+ return {
24641
+ iso: formatDate(options.date, "yyyy-MM-dd"),
24642
+ events: getCalendarEventsForDate(options.events, options.date),
24643
+ inCurrentMonth: options.inCurrentMonth,
24644
+ today: options.today,
24645
+ selected: options.selected,
24646
+ disabled: options.disabled
24647
+ };
24648
+ }
24649
+ function formatCalendarEventCountLabel(eventCount, template) {
24650
+ if (eventCount <= 0) return "";
24651
+ const source = template && template.trim() ? template : "{n} events";
24652
+ return source.replace(/\{n\}/g, String(eventCount));
24653
+ }
24654
+ function appendCalendarEventCountLabel(dayLabel, eventCount, template) {
24655
+ const extra = formatCalendarEventCountLabel(eventCount, template);
24656
+ return extra ? `${dayLabel}, ${extra}` : dayLabel;
24657
+ }
24488
24658
  function getCalendarMonthClasses(state) {
24489
24659
  return classNames(
24490
24660
  "inline-flex items-center justify-center rounded-[var(--tiger-radius-md,0.5rem)] py-2 px-3 text-sm",
@@ -28361,6 +28531,70 @@ function clearActiveListDrag() {
28361
28531
  emit();
28362
28532
  }
28363
28533
 
28534
+ // src/utils/fullscreen-utils.ts
28535
+ function isFullscreenSupported() {
28536
+ if (!isBrowser()) return false;
28537
+ const el = document.documentElement;
28538
+ return typeof el.requestFullscreen === "function" || typeof el.webkitRequestFullscreen === "function";
28539
+ }
28540
+ function getFullscreenElement() {
28541
+ if (!isBrowser()) return null;
28542
+ const doc = document;
28543
+ return document.fullscreenElement ?? doc.webkitFullscreenElement ?? null;
28544
+ }
28545
+ function isElementFullscreen(target) {
28546
+ const current = getFullscreenElement();
28547
+ if (!current) return false;
28548
+ if (!target) return true;
28549
+ return current === target;
28550
+ }
28551
+ async function requestElementFullscreen(target) {
28552
+ if (!isBrowser()) return;
28553
+ const el = target;
28554
+ if (typeof el.requestFullscreen === "function") {
28555
+ await el.requestFullscreen();
28556
+ return;
28557
+ }
28558
+ if (typeof el.webkitRequestFullscreen === "function") {
28559
+ await el.webkitRequestFullscreen();
28560
+ return;
28561
+ }
28562
+ throw new Error("Fullscreen is not supported");
28563
+ }
28564
+ async function exitElementFullscreen() {
28565
+ if (!isBrowser()) return;
28566
+ if (!getFullscreenElement()) return;
28567
+ const doc = document;
28568
+ if (typeof document.exitFullscreen === "function") {
28569
+ await document.exitFullscreen();
28570
+ return;
28571
+ }
28572
+ if (typeof doc.webkitExitFullscreen === "function") {
28573
+ await doc.webkitExitFullscreen();
28574
+ }
28575
+ }
28576
+ function subscribeFullscreenChange(onChange) {
28577
+ if (!isBrowser()) return () => void 0;
28578
+ document.addEventListener("fullscreenchange", onChange);
28579
+ document.addEventListener("webkitfullscreenchange", onChange);
28580
+ return () => {
28581
+ document.removeEventListener("fullscreenchange", onChange);
28582
+ document.removeEventListener("webkitfullscreenchange", onChange);
28583
+ };
28584
+ }
28585
+ function resolveFullscreenTarget(target) {
28586
+ if (!isBrowser()) return null;
28587
+ if (typeof target === "function") {
28588
+ try {
28589
+ return target() ?? document.documentElement;
28590
+ } catch {
28591
+ return document.documentElement;
28592
+ }
28593
+ }
28594
+ return target ?? document.documentElement;
28595
+ }
28596
+ var fullscreenButtonClasses = "inline-flex items-center justify-center min-h-9 min-w-9 rounded-[var(--tiger-radius-md,0.5rem)] text-[var(--tiger-text,#111827)] hover:bg-[var(--tiger-surface-muted,#f3f4f6)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--tiger-focus-ring,var(--tiger-primary,#2563eb))]/40 disabled:opacity-50 disabled:cursor-not-allowed";
28597
+
28364
28598
  // src/utils/resizable-utils.ts
28365
28599
  var resizableBaseClasses = "relative";
28366
28600
  var resizableHandleBaseClasses = "absolute z-10 tiger-motion-aware transition-opacity duration-150 opacity-0 pointer-events-none group-hover/resizable:opacity-100 group-hover/resizable:pointer-events-auto hover:opacity-100 hover:pointer-events-auto focus-visible:opacity-100 focus-visible:pointer-events-auto outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-[var(--tiger-focus-ring,var(--tiger-primary,#2563eb))] touch-none";
@@ -35366,7 +35600,7 @@ function createTigercatPlugin(options = {}) {
35366
35600
  }
35367
35601
 
35368
35602
  // src/index.ts
35369
- var version = "2.1.4";
35603
+ var version = "2.2.0";
35370
35604
  export {
35371
35605
  AFFIX_UNPINNED_STATE,
35372
35606
  ANIMATION_DURATION_FAST_MS,
@@ -35692,6 +35926,7 @@ export {
35692
35926
  anchorNestedListClasses,
35693
35927
  animationDelayClasses,
35694
35928
  announceToScreenReader,
35929
+ appendCalendarEventCountLabel,
35695
35930
  appendDefaultTaskBoardCard,
35696
35931
  appendDefaultTaskBoardColumn,
35697
35932
  appendSignaturePoint,
@@ -35786,6 +36021,7 @@ export {
35786
36021
  buildAffixPlaceholderStyle,
35787
36022
  buildAffixRootMargin,
35788
36023
  buildAffixStyle,
36024
+ buildCalendarDateCellExtra,
35789
36025
  buildChartLegendItems,
35790
36026
  buildChartSeriesKeys,
35791
36027
  buildChatMessageStatusInfo,
@@ -35824,6 +36060,8 @@ export {
35824
36060
  calculateTransform,
35825
36061
  calculateVirtualColumnRange,
35826
36062
  calculateVirtualRange,
36063
+ calendarDateCellDotClasses,
36064
+ calendarDateCellExtraClasses,
35827
36065
  calendarGridClasses,
35828
36066
  calendarHeaderClasses,
35829
36067
  calendarNavButtonClasses,
@@ -35963,6 +36201,7 @@ export {
35963
36201
  clearChartAxisTickCache,
35964
36202
  clearFieldErrors,
35965
36203
  clearPieArcCache,
36204
+ clearRegisteredIcons,
35966
36205
  clearSelectValue,
35967
36206
  clearSignatureStrokes,
35968
36207
  clearTextareaAutoResize,
@@ -36323,6 +36562,7 @@ export {
36323
36562
  evaluateFormConditions,
36324
36563
  exclamationCircleIcon,
36325
36564
  exclusiveRangeToInclusive,
36565
+ exitElementFullscreen,
36326
36566
  expandChevronIcon16PathD,
36327
36567
  exportChartPng,
36328
36568
  exportSignatureDataUrl,
@@ -36380,6 +36620,7 @@ export {
36380
36620
  findHotkeyMatch,
36381
36621
  findLastEnabledIndex,
36382
36622
  findMarkdownHotkeyMatch,
36623
+ findNearestOverflowAncestor,
36383
36624
  findNearestPointIndex,
36384
36625
  findNearestSeriesPoint,
36385
36626
  findNextEnabledIndex,
@@ -36428,6 +36669,7 @@ export {
36428
36669
  formatBytes,
36429
36670
  formatCalendarDayLabel,
36430
36671
  formatCalendarDayNumber,
36672
+ formatCalendarEventCountLabel,
36431
36673
  formatChartTemplate,
36432
36674
  formatChatTime,
36433
36675
  formatColorPickerSelectPreset,
@@ -36479,6 +36721,7 @@ export {
36479
36721
  formatTimePickerDisplay,
36480
36722
  formatTreeSelectNodeLabel,
36481
36723
  freezeTableColumnWidths,
36724
+ fullscreenButtonClasses,
36482
36725
  fullscreenExitIcon,
36483
36726
  fullscreenIcon,
36484
36727
  funnelSegmentTransitionClasses,
@@ -36568,6 +36811,8 @@ export {
36568
36811
  getCalendarDayClasses,
36569
36812
  getCalendarDayKeyAction,
36570
36813
  getCalendarDays,
36814
+ getCalendarEventDotStyle,
36815
+ getCalendarEventsForDate,
36571
36816
  getCalendarLabels,
36572
36817
  getCalendarMonthClasses,
36573
36818
  getCalendarMonthDaysCacheSize,
@@ -36803,6 +37048,8 @@ export {
36803
37048
  getFormWizardHeaderClasses,
36804
37049
  getFormWizardLabels,
36805
37050
  getFormWizardWrapperClasses,
37051
+ getFullscreenElement,
37052
+ getFullscreenLabels,
36806
37053
  getFunnelGradientPrefix,
36807
37054
  getGanttDependencyPath,
36808
37055
  getGanttTaskAriaLabel,
@@ -36891,6 +37138,7 @@ export {
36891
37138
  getKbdVariantClasses,
36892
37139
  getLastEnabledFileIndex,
36893
37140
  getLayoutContentClasses,
37141
+ getLayoutFooterClasses,
36894
37142
  getLayoutHeaderClasses,
36895
37143
  getLayoutRootClasses,
36896
37144
  getLayoutSidebarClasses,
@@ -37564,6 +37812,7 @@ export {
37564
37812
  isDividerHorizontal,
37565
37813
  isDragEnabled,
37566
37814
  isDrawerSwipeCloseGesture,
37815
+ isElementFullscreen,
37567
37816
  isEnterKey,
37568
37817
  isEscapeKey,
37569
37818
  isEventOutside,
@@ -37572,6 +37821,7 @@ export {
37572
37821
  isFocusInsideNavigationMenu,
37573
37822
  isFormItemGroupControl,
37574
37823
  isFormValidationCancelled,
37824
+ isFullscreenSupported,
37575
37825
  isHTMLElement,
37576
37826
  isHourOptionDisabled,
37577
37827
  isHttpResultStatus,
@@ -37648,6 +37898,7 @@ export {
37648
37898
  isTabPaneType,
37649
37899
  isTableCellEditable,
37650
37900
  isTablet,
37901
+ isTextCopyable,
37651
37902
  isTimeInRange,
37652
37903
  isTimePickerDesktopLayout,
37653
37904
  isTimePickerRangeComplete,
@@ -37682,6 +37933,7 @@ export {
37682
37933
  layoutBarRects,
37683
37934
  layoutContentClasses,
37684
37935
  layoutFooterClasses,
37936
+ layoutFooterCompactClasses,
37685
37937
  layoutFunnel,
37686
37938
  layoutGantt,
37687
37939
  layoutGauge,
@@ -38121,13 +38373,17 @@ export {
38121
38373
  redoFormHistory,
38122
38374
  registerBuiltInThemes,
38123
38375
  registerEscapeDismiss,
38376
+ registerIcon,
38377
+ registerIcons,
38124
38378
  registerImageGroupItem,
38379
+ registeredIconNames,
38125
38380
  remapCropRect,
38126
38381
  rememberCascaderLabel,
38127
38382
  rememberSelectOptions,
38128
38383
  rememberTreeSelectLabel,
38129
38384
  removeCssVarsCached,
38130
38385
  removeTagAt,
38386
+ renderCodeHighlightHtml,
38131
38387
  renderMarkdownInline,
38132
38388
  renderMarkdownToHtml,
38133
38389
  renderTokenHtml,
@@ -38142,6 +38398,7 @@ export {
38142
38398
  reorderTableRowsByKey,
38143
38399
  replaceAnchorHash,
38144
38400
  replaceKeys,
38401
+ requestElementFullscreen,
38145
38402
  resetAreaGradientCounter,
38146
38403
  resetAriaIdCounter,
38147
38404
  resetBarGradientCounter,
@@ -38232,6 +38489,7 @@ export {
38232
38489
  resolveFormConditionState,
38233
38490
  resolveFormFieldConditionState,
38234
38491
  resolveFormLabelAlign,
38492
+ resolveFullscreenTarget,
38235
38493
  resolveGutter,
38236
38494
  resolveHeatmapRenderMode,
38237
38495
  resolveHighlightCaseSensitive,
@@ -38292,6 +38550,7 @@ export {
38292
38550
  resolveMenuCollapsed,
38293
38551
  resolveMenuIconKind,
38294
38552
  resolveMenuMode,
38553
+ resolveMenuSearchQuery,
38295
38554
  resolveMenuTabStopKey,
38296
38555
  resolveMessageDuration,
38297
38556
  resolveMotionDuration,
@@ -38352,6 +38611,8 @@ export {
38352
38611
  resolveTaskBoardView,
38353
38612
  resolveTextAlign,
38354
38613
  resolveTextColor,
38614
+ resolveTextCopyContent,
38615
+ resolveTextCopyableOptions,
38355
38616
  resolveTextSize,
38356
38617
  resolveTextTag,
38357
38618
  resolveTextWeight,
@@ -38508,6 +38769,7 @@ export {
38508
38769
  shouldShowAutoCompleteClear,
38509
38770
  shouldShowBackTop,
38510
38771
  shouldShowCascaderClear,
38772
+ shouldShowMenuSearch,
38511
38773
  shouldShowSelectClear,
38512
38774
  shouldShowTreeSelectClear,
38513
38775
  shouldSkipNavigationMenuOpenDelay,
@@ -38632,6 +38894,7 @@ export {
38632
38894
  submenuExpandIconPopupClasses,
38633
38895
  submenuHeightTransitionClasses,
38634
38896
  submenuTitleClasses,
38897
+ subscribeFullscreenChange,
38635
38898
  subscribeTableCardViewport,
38636
38899
  successCircleSolidIcon20PathD,
38637
38900
  sunIcon,
@@ -38716,6 +38979,10 @@ export {
38716
38979
  terminalIcon,
38717
38980
  textAlignClasses,
38718
38981
  textColorClasses,
38982
+ textCopyableBodyClasses,
38983
+ textCopyableButtonClasses,
38984
+ textCopyableLiveClasses,
38985
+ textCopyableRootClasses,
38719
38986
  textDecorationClasses,
38720
38987
  textSizeClasses,
38721
38988
  textWeightClasses,
@@ -38837,6 +39104,7 @@ export {
38837
39104
  uniqueMenuKeys,
38838
39105
  uniqueTreeKeys,
38839
39106
  unlockIcon,
39107
+ unregisterIcon,
38840
39108
  unregisterImageGroupItem,
38841
39109
  updateCronExpressionField,
38842
39110
  updateDragOffset,