kanto-ds 1.9.0 → 1.10.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 (30) hide show
  1. package/README.md +9 -0
  2. package/dist/cdn/kanto.min.js +178 -155
  3. package/dist/chunks/{defaults-yhaR6U65.js → defaults-BnB3ir8l.js} +29 -28
  4. package/dist/chunks/{defaults-yhaR6U65.js.map → defaults-BnB3ir8l.js.map} +1 -1
  5. package/dist/components/core/kt-icon/kt-icon.js +1 -1
  6. package/dist/components/data/kt-chart/kt-chart.js +4 -2
  7. package/dist/components/data/kt-chart/kt-chart.js.map +1 -1
  8. package/dist/components/data/kt-table/kt-table.js +11 -6
  9. package/dist/components/data/kt-table/kt-table.js.map +1 -1
  10. package/dist/components/data/kt-tree/kt-tree.js +18 -15
  11. package/dist/components/data/kt-tree/kt-tree.js.map +1 -1
  12. package/dist/components/navigation/kt-sub-menu-navigation/kt-sub-menu-navigation.js +33 -29
  13. package/dist/components/navigation/kt-sub-menu-navigation/kt-sub-menu-navigation.js.map +1 -1
  14. package/dist/components/overlays/kt-modal/kt-modal.js +8 -4
  15. package/dist/components/overlays/kt-modal/kt-modal.js.map +1 -1
  16. package/dist/components/overlays/kt-side-panel/kt-side-panel.js +14 -7
  17. package/dist/components/overlays/kt-side-panel/kt-side-panel.js.map +1 -1
  18. package/dist/components/overlays/kt-tour/kt-tour.d.ts +6 -0
  19. package/dist/components/overlays/kt-tour/kt-tour.js +48 -37
  20. package/dist/components/overlays/kt-tour/kt-tour.js.map +1 -1
  21. package/dist/custom-elements.json +11 -1
  22. package/dist/docs/kt-sub-menu-navigation.md +1 -0
  23. package/dist/icons/defaults.d.ts +1 -0
  24. package/dist/icons/index.js +1 -1
  25. package/dist/index.js +1 -1
  26. package/dist/react/index.d.ts +9 -0
  27. package/dist/react/index.js.map +1 -1
  28. package/dist/react/jsx.d.ts +9 -1
  29. package/dist/web-types.json +1 -1
  30. package/package.json +3 -2
@@ -1,30 +1,30 @@
1
- import { X as s, User as a, Upload as i, TriangleAlert as c, Trash2 as l, Settings as f, Send as g, Search as p, RefreshCw as u, Plus as C, Pencil as y, PanelLeft as A, Minus as d, Menu as w, LoaderCircle as h, Info as I, Filter as $, FileUp as b, File as L, EyeOff as U, Eye as k, ExternalLink as v, Ellipsis as E, Download as Z, Copy as m, CircleCheck as z, CircleAlert as D, ChevronUp as F, ChevronRight as M, ChevronLeft as P, ChevronDown as S, Check as j, Calendar as x, ArrowUp as O, ArrowDown as R } from "lucide";
1
+ import { X as s, User as a, Upload as i, TriangleAlert as c, Trash2 as l, Settings as f, Send as g, Search as p, RefreshCw as u, Plus as C, Pencil as y, PanelLeft as A, Minus as d, Menu as w, LoaderCircle as I, Info as h, Inbox as b, Filter as $, FileUp as L, File as U, EyeOff as k, Eye as v, ExternalLink as E, Ellipsis as Z, Download as m, Copy as x, CircleCheck as z, CircleAlert as D, ChevronUp as F, ChevronRight as M, ChevronLeft as P, ChevronDown as S, Check as j, Calendar as O, ArrowUp as R, ArrowDown as T } from "lucide";
2
2
  const n = /* @__PURE__ */ new Map();
3
3
  function t(e) {
4
4
  return e.replace(/([A-Z]+)([A-Z][a-z])/g, "$1-$2").replace(/([a-zA-Z])(\d)/g, "$1-$2").replace(/([a-z])([A-Z])/g, "$1-$2").replace(/[\s_]+/g, "-").toLowerCase();
5
5
  }
6
- function T(e, r) {
6
+ function K(e, r) {
7
7
  n.set(t(e), r);
8
8
  }
9
- function K(e) {
9
+ function N(e) {
10
10
  for (const [r, o] of Object.entries(e))
11
- N(o) && T(r, o);
11
+ X(o) && K(r, o);
12
12
  }
13
- function q(e) {
13
+ function B(e) {
14
14
  return n.get(t(e));
15
15
  }
16
- function B() {
16
+ function G() {
17
17
  return [...n.keys()].sort();
18
18
  }
19
- function N(e) {
19
+ function X(e) {
20
20
  return Array.isArray(e) && e.every(
21
21
  (r) => Array.isArray(r) && typeof r[0] == "string" && typeof r[1] == "object" && r[1] !== null
22
22
  );
23
23
  }
24
- const X = {
25
- ArrowDown: R,
26
- ArrowUp: O,
27
- Calendar: x,
24
+ const _ = {
25
+ ArrowDown: T,
26
+ ArrowUp: R,
27
+ Calendar: O,
28
28
  Check: j,
29
29
  ChevronDown: S,
30
30
  ChevronLeft: P,
@@ -32,17 +32,18 @@ const X = {
32
32
  ChevronUp: F,
33
33
  CircleAlert: D,
34
34
  CircleCheck: z,
35
- Copy: m,
36
- Download: Z,
37
- Ellipsis: E,
38
- ExternalLink: v,
39
- Eye: k,
40
- EyeOff: U,
41
- File: L,
42
- FileUp: b,
35
+ Copy: x,
36
+ Download: m,
37
+ Ellipsis: Z,
38
+ ExternalLink: E,
39
+ Eye: v,
40
+ EyeOff: k,
41
+ File: U,
42
+ FileUp: L,
43
43
  Filter: $,
44
- Info: I,
45
- LoaderCircle: h,
44
+ Inbox: b,
45
+ Info: h,
46
+ LoaderCircle: I,
46
47
  Menu: w,
47
48
  Minus: d,
48
49
  PanelLeft: A,
@@ -58,13 +59,13 @@ const X = {
58
59
  User: a,
59
60
  X: s
60
61
  };
61
- K(X);
62
+ N(_);
62
63
  export {
63
- K as a,
64
- B as b,
65
- X as d,
66
- q as g,
67
- T as r,
64
+ N as a,
65
+ G as b,
66
+ _ as d,
67
+ B as g,
68
+ K as r,
68
69
  t
69
70
  };
70
- //# sourceMappingURL=defaults-yhaR6U65.js.map
71
+ //# sourceMappingURL=defaults-BnB3ir8l.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"defaults-yhaR6U65.js","sources":["../../src/icons/registry.ts","../../src/icons/defaults.ts"],"sourcesContent":["/**\n * The icon registry.\n *\n * `<kt-icon>` looks icons up by name at render time, which means the set of\n * icons cannot be statically analysed and a bundler cannot tree-shake it. So\n * Kanto does not bundle all two thousand Lucide icons: the elements register\n * the handful they need themselves, and an application registers whatever else\n * it uses.\n *\n * import { Rocket, Wallet } from 'lucide';\n * import { registerIcons } from 'kanto-ds/icons';\n *\n * registerIcons({ Rocket, Wallet });\n *\n * Names are normalised to kebab-case, so `Rocket`, `rocket` and\n * `ChevronDown` / `chevron-down` all resolve.\n */\n\n/** A Lucide icon: a flat list of SVG children, each `[tag, attributes]`. */\nexport type IconNode = [tag: string, attrs: Record<string, string | number | undefined>][];\n\nconst registry = new Map<string, IconNode>();\n\n/**\n * `ChevronDown` → `chevron-down`, `Trash2` → `trash-2`, `AArrowDown` →\n * `a-arrow-down`.\n *\n * The digit boundary matters: Lucide names that icon `trash-2`, so a rule that\n * only splits on case produces `trash2` and the lookup quietly misses.\n */\nexport function toKebabCase(name: string): string {\n return name\n .replace(/([A-Z]+)([A-Z][a-z])/g, '$1-$2') // acronym run before a word\n .replace(/([a-zA-Z])(\\d)/g, '$1-$2') // letter before a digit\n .replace(/([a-z])([A-Z])/g, '$1-$2') // ordinary camel boundary\n .replace(/[\\s_]+/g, '-')\n .toLowerCase();\n}\n\n/** Registers a single icon under `name`. */\nexport function registerIcon(name: string, node: IconNode): void {\n registry.set(toKebabCase(name), node);\n}\n\n/**\n * Registers a map of icons. Accepts a Lucide namespace import directly:\n * every non-icon export (`createElement`, `createIcons`, …) is skipped.\n */\nexport function registerIcons(icons: Record<string, unknown>): void {\n for (const [name, node] of Object.entries(icons)) {\n if (isIconNode(node)) registerIcon(name, node);\n }\n}\n\n/** Returns the icon registered under `name`, or `undefined`. */\nexport function getIcon(name: string): IconNode | undefined {\n return registry.get(toKebabCase(name));\n}\n\n/** Every registered name, kebab-cased and sorted. Useful for docs and tests. */\nexport function registeredIcons(): string[] {\n return [...registry.keys()].sort();\n}\n\nfunction isIconNode(value: unknown): value is IconNode {\n return (\n Array.isArray(value) &&\n value.every(\n (child) =>\n Array.isArray(child) &&\n typeof child[0] === 'string' &&\n typeof child[1] === 'object' &&\n child[1] !== null,\n )\n );\n}\n","/**\n * The icons the design system uses in its own elements, and the few a first\n * screen reaches for — plus, pencil, settings, download, upload, an external\n * link, a filter, an ellipsis, a refresh — so a button copied from the docs\n * draws its icon without a registration step.\n *\n * Importing any Kanto element pulls this set in — roughly 3 kB of path data,\n * the price of `<kt-select>` drawing its own chevron and a first `icon=\"plus\"`\n * working. Other application icons are registered through `registerIcons`.\n */\nimport {\n ArrowDown,\n ArrowUp,\n Calendar,\n Check,\n ChevronDown,\n ChevronLeft,\n ChevronRight,\n ChevronUp,\n CircleAlert,\n CircleCheck,\n Copy,\n Download,\n Ellipsis,\n ExternalLink,\n Eye,\n EyeOff,\n File,\n FileUp,\n Filter,\n Info,\n LoaderCircle,\n Menu,\n Minus,\n PanelLeft,\n Pencil,\n Plus,\n RefreshCw,\n Search,\n Send,\n Settings,\n Trash2,\n TriangleAlert,\n Upload,\n User,\n X,\n} from 'lucide';\n// The sibling registry, not the `kanto-ds` barrel: the barrel pulls in every\n// element, and one of them pulls in this file — a cycle that leaves\n// `registerIcons` undefined by the time the call below runs.\nimport { registerIcons } from './registry.js';\n\n/** Icons referenced by Kanto elements, keyed by their Lucide name. */\nexport const defaultIcons = {\n ArrowDown,\n ArrowUp,\n Calendar,\n Check,\n ChevronDown,\n ChevronLeft,\n ChevronRight,\n ChevronUp,\n CircleAlert,\n CircleCheck,\n Copy,\n Download,\n Ellipsis,\n ExternalLink,\n Eye,\n EyeOff,\n File,\n FileUp,\n Filter,\n Info,\n LoaderCircle,\n Menu,\n Minus,\n PanelLeft,\n Pencil,\n Plus,\n RefreshCw,\n Search,\n Send,\n Settings,\n Trash2,\n TriangleAlert,\n Upload,\n User,\n X,\n};\n\nregisterIcons(defaultIcons);\n"],"names":["registry","toKebabCase","name","registerIcon","node","registerIcons","icons","isIconNode","getIcon","registeredIcons","value","child","defaultIcons","ArrowDown","ArrowUp","Calendar","Check","ChevronDown","ChevronLeft","ChevronRight","ChevronUp","CircleAlert","CircleCheck","Copy","Download","Ellipsis","ExternalLink","Eye","EyeOff","File","FileUp","Filter","Info","LoaderCircle","Menu","Minus","PanelLeft","Pencil","Plus","RefreshCw","Search","Send","Settings","Trash2","TriangleAlert","Upload","User","X"],"mappings":";AAqBA,MAAMA,wBAAe,IAAA;AASd,SAASC,EAAYC,GAAsB;AAChD,SAAOA,EACJ,QAAQ,yBAAyB,OAAO,EACxC,QAAQ,mBAAmB,OAAO,EAClC,QAAQ,mBAAmB,OAAO,EAClC,QAAQ,WAAW,GAAG,EACtB,YAAA;AACL;AAGO,SAASC,EAAaD,GAAcE,GAAsB;AAC/D,EAAAJ,EAAS,IAAIC,EAAYC,CAAI,GAAGE,CAAI;AACtC;AAMO,SAASC,EAAcC,GAAsC;AAClE,aAAW,CAACJ,GAAME,CAAI,KAAK,OAAO,QAAQE,CAAK;AAC7C,IAAIC,EAAWH,CAAI,KAAGD,EAAaD,GAAME,CAAI;AAEjD;AAGO,SAASI,EAAQN,GAAoC;AAC1D,SAAOF,EAAS,IAAIC,EAAYC,CAAI,CAAC;AACvC;AAGO,SAASO,IAA4B;AAC1C,SAAO,CAAC,GAAGT,EAAS,KAAA,CAAM,EAAE,KAAA;AAC9B;AAEA,SAASO,EAAWG,GAAmC;AACrD,SACE,MAAM,QAAQA,CAAK,KACnBA,EAAM;AAAA,IACJ,CAACC,MACC,MAAM,QAAQA,CAAK,KACnB,OAAOA,EAAM,CAAC,KAAM,YACpB,OAAOA,EAAM,CAAC,KAAM,YACpBA,EAAM,CAAC,MAAM;AAAA,EAAA;AAGrB;ACtBO,MAAMC,IAAe;AAAA,EAC1B,WAAAC;AAAA,EACA,SAAAC;AAAA,EACA,UAAAC;AAAA,EACA,OAAAC;AAAA,EACA,aAAAC;AAAA,EACA,aAAAC;AAAA,EACA,cAAAC;AAAA,EACA,WAAAC;AAAA,EACA,aAAAC;AAAA,EACA,aAAAC;AAAA,EACA,MAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,cAAAC;AAAA,EACA,KAAAC;AAAA,EACA,QAAAC;AAAA,EACA,MAAAC;AAAA,EACA,QAAAC;AAAA,EACA,QAAAC;AAAA,EACA,MAAAC;AAAA,EACA,cAAAC;AAAA,EACA,MAAAC;AAAA,EACA,OAAAC;AAAA,EACA,WAAAC;AAAA,EACA,QAAAC;AAAA,EACA,MAAAC;AAAA,EACA,WAAAC;AAAA,EACA,QAAAC;AAAA,EACA,MAAAC;AAAA,EACA,UAAAC;AAAA,EACA,QAAAC;AAAA,EACA,eAAAC;AAAA,EACA,QAAAC;AAAA,EACA,MAAAC;AAAA,EACA,GAAAC;AACF;AAEA1C,EAAcO,CAAY;"}
1
+ {"version":3,"file":"defaults-BnB3ir8l.js","sources":["../../src/icons/registry.ts","../../src/icons/defaults.ts"],"sourcesContent":["/**\n * The icon registry.\n *\n * `<kt-icon>` looks icons up by name at render time, which means the set of\n * icons cannot be statically analysed and a bundler cannot tree-shake it. So\n * Kanto does not bundle all two thousand Lucide icons: the elements register\n * the handful they need themselves, and an application registers whatever else\n * it uses.\n *\n * import { Rocket, Wallet } from 'lucide';\n * import { registerIcons } from 'kanto-ds/icons';\n *\n * registerIcons({ Rocket, Wallet });\n *\n * Names are normalised to kebab-case, so `Rocket`, `rocket` and\n * `ChevronDown` / `chevron-down` all resolve.\n */\n\n/** A Lucide icon: a flat list of SVG children, each `[tag, attributes]`. */\nexport type IconNode = [tag: string, attrs: Record<string, string | number | undefined>][];\n\nconst registry = new Map<string, IconNode>();\n\n/**\n * `ChevronDown` → `chevron-down`, `Trash2` → `trash-2`, `AArrowDown` →\n * `a-arrow-down`.\n *\n * The digit boundary matters: Lucide names that icon `trash-2`, so a rule that\n * only splits on case produces `trash2` and the lookup quietly misses.\n */\nexport function toKebabCase(name: string): string {\n return name\n .replace(/([A-Z]+)([A-Z][a-z])/g, '$1-$2') // acronym run before a word\n .replace(/([a-zA-Z])(\\d)/g, '$1-$2') // letter before a digit\n .replace(/([a-z])([A-Z])/g, '$1-$2') // ordinary camel boundary\n .replace(/[\\s_]+/g, '-')\n .toLowerCase();\n}\n\n/** Registers a single icon under `name`. */\nexport function registerIcon(name: string, node: IconNode): void {\n registry.set(toKebabCase(name), node);\n}\n\n/**\n * Registers a map of icons. Accepts a Lucide namespace import directly:\n * every non-icon export (`createElement`, `createIcons`, …) is skipped.\n */\nexport function registerIcons(icons: Record<string, unknown>): void {\n for (const [name, node] of Object.entries(icons)) {\n if (isIconNode(node)) registerIcon(name, node);\n }\n}\n\n/** Returns the icon registered under `name`, or `undefined`. */\nexport function getIcon(name: string): IconNode | undefined {\n return registry.get(toKebabCase(name));\n}\n\n/** Every registered name, kebab-cased and sorted. Useful for docs and tests. */\nexport function registeredIcons(): string[] {\n return [...registry.keys()].sort();\n}\n\nfunction isIconNode(value: unknown): value is IconNode {\n return (\n Array.isArray(value) &&\n value.every(\n (child) =>\n Array.isArray(child) &&\n typeof child[0] === 'string' &&\n typeof child[1] === 'object' &&\n child[1] !== null,\n )\n );\n}\n","/**\n * The icons the design system uses in its own elements, and the few a first\n * screen reaches for — plus, pencil, settings, download, upload, an external\n * link, a filter, an ellipsis, a refresh — so a button copied from the docs\n * draws its icon without a registration step.\n *\n * Importing any Kanto element pulls this set in — roughly 3 kB of path data,\n * the price of `<kt-select>` drawing its own chevron and a first `icon=\"plus\"`\n * working. Other application icons are registered through `registerIcons`.\n */\nimport {\n ArrowDown,\n ArrowUp,\n Calendar,\n Check,\n ChevronDown,\n ChevronLeft,\n ChevronRight,\n ChevronUp,\n CircleAlert,\n CircleCheck,\n Copy,\n Download,\n Ellipsis,\n ExternalLink,\n Eye,\n EyeOff,\n File,\n FileUp,\n Filter,\n Inbox,\n Info,\n LoaderCircle,\n Menu,\n Minus,\n PanelLeft,\n Pencil,\n Plus,\n RefreshCw,\n Search,\n Send,\n Settings,\n Trash2,\n TriangleAlert,\n Upload,\n User,\n X,\n} from 'lucide';\n// The sibling registry, not the `kanto-ds` barrel: the barrel pulls in every\n// element, and one of them pulls in this file — a cycle that leaves\n// `registerIcons` undefined by the time the call below runs.\nimport { registerIcons } from './registry.js';\n\n/** Icons referenced by Kanto elements, keyed by their Lucide name. */\nexport const defaultIcons = {\n ArrowDown,\n ArrowUp,\n Calendar,\n Check,\n ChevronDown,\n ChevronLeft,\n ChevronRight,\n ChevronUp,\n CircleAlert,\n CircleCheck,\n Copy,\n Download,\n Ellipsis,\n ExternalLink,\n Eye,\n EyeOff,\n File,\n FileUp,\n Filter,\n Inbox,\n Info,\n LoaderCircle,\n Menu,\n Minus,\n PanelLeft,\n Pencil,\n Plus,\n RefreshCw,\n Search,\n Send,\n Settings,\n Trash2,\n TriangleAlert,\n Upload,\n User,\n X,\n};\n\nregisterIcons(defaultIcons);\n"],"names":["registry","toKebabCase","name","registerIcon","node","registerIcons","icons","isIconNode","getIcon","registeredIcons","value","child","defaultIcons","ArrowDown","ArrowUp","Calendar","Check","ChevronDown","ChevronLeft","ChevronRight","ChevronUp","CircleAlert","CircleCheck","Copy","Download","Ellipsis","ExternalLink","Eye","EyeOff","File","FileUp","Filter","Inbox","Info","LoaderCircle","Menu","Minus","PanelLeft","Pencil","Plus","RefreshCw","Search","Send","Settings","Trash2","TriangleAlert","Upload","User","X"],"mappings":";AAqBA,MAAMA,wBAAe,IAAA;AASd,SAASC,EAAYC,GAAsB;AAChD,SAAOA,EACJ,QAAQ,yBAAyB,OAAO,EACxC,QAAQ,mBAAmB,OAAO,EAClC,QAAQ,mBAAmB,OAAO,EAClC,QAAQ,WAAW,GAAG,EACtB,YAAA;AACL;AAGO,SAASC,EAAaD,GAAcE,GAAsB;AAC/D,EAAAJ,EAAS,IAAIC,EAAYC,CAAI,GAAGE,CAAI;AACtC;AAMO,SAASC,EAAcC,GAAsC;AAClE,aAAW,CAACJ,GAAME,CAAI,KAAK,OAAO,QAAQE,CAAK;AAC7C,IAAIC,EAAWH,CAAI,KAAGD,EAAaD,GAAME,CAAI;AAEjD;AAGO,SAASI,EAAQN,GAAoC;AAC1D,SAAOF,EAAS,IAAIC,EAAYC,CAAI,CAAC;AACvC;AAGO,SAASO,IAA4B;AAC1C,SAAO,CAAC,GAAGT,EAAS,KAAA,CAAM,EAAE,KAAA;AAC9B;AAEA,SAASO,EAAWG,GAAmC;AACrD,SACE,MAAM,QAAQA,CAAK,KACnBA,EAAM;AAAA,IACJ,CAACC,MACC,MAAM,QAAQA,CAAK,KACnB,OAAOA,EAAM,CAAC,KAAM,YACpB,OAAOA,EAAM,CAAC,KAAM,YACpBA,EAAM,CAAC,MAAM;AAAA,EAAA;AAGrB;ACrBO,MAAMC,IAAe;AAAA,EAC1B,WAAAC;AAAA,EACA,SAAAC;AAAA,EACA,UAAAC;AAAA,EACA,OAAAC;AAAA,EACA,aAAAC;AAAA,EACA,aAAAC;AAAA,EACA,cAAAC;AAAA,EACA,WAAAC;AAAA,EACA,aAAAC;AAAA,EACA,aAAAC;AAAA,EACA,MAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,cAAAC;AAAA,EACA,KAAAC;AAAA,EACA,QAAAC;AAAA,EACA,MAAAC;AAAA,EACA,QAAAC;AAAA,EACA,QAAAC;AAAA,EACA,OAAAC;AAAA,EACA,MAAAC;AAAA,EACA,cAAAC;AAAA,EACA,MAAAC;AAAA,EACA,OAAAC;AAAA,EACA,WAAAC;AAAA,EACA,QAAAC;AAAA,EACA,MAAAC;AAAA,EACA,WAAAC;AAAA,EACA,QAAAC;AAAA,EACA,MAAAC;AAAA,EACA,UAAAC;AAAA,EACA,QAAAC;AAAA,EACA,eAAAC;AAAA,EACA,QAAAC;AAAA,EACA,MAAAC;AAAA,EACA,GAAAC;AACF;AAEA3C,EAAcO,CAAY;"}
@@ -1,7 +1,7 @@
1
1
  import { css as f, html as c, nothing as l } from "lit";
2
2
  import { property as n } from "lit/decorators.js";
3
3
  import { K as m, d as u } from "../../../chunks/kt-element-DvWtPQ1Y.js";
4
- import { g as v } from "../../../chunks/defaults-yhaR6U65.js";
4
+ import { g as v } from "../../../chunks/defaults-BnB3ir8l.js";
5
5
  var w = Object.defineProperty, o = (i, e, r, h) => {
6
6
  for (var t = void 0, a = i.length - 1, d; a >= 0; a--)
7
7
  (d = i[a]) && (t = d(e, r, t) || t);
@@ -9,8 +9,10 @@ function St(s) {
9
9
  return (e < 1.5 ? 1 : e < 3 ? 2 : e < 7 ? 5 : 10) * 10 ** t;
10
10
  }
11
11
  function ot(s, t, e) {
12
- if (t === s) {
13
- const c = Math.abs(s) || 1;
12
+ if (t === s && s === 0)
13
+ t = 1;
14
+ else if (t === s) {
15
+ const c = Math.abs(s);
14
16
  s -= c, t += c;
15
17
  }
16
18
  const a = St((t - s) / Math.max(1, e - 1)), o = Math.max(0, -Math.floor(Math.log10(a))), i = (c) => Number(c.toFixed(o)) || 0, n = i(Math.floor(s / a) * a), r = i(Math.ceil(t / a) * a), h = [];