@pingux/astro 2.235.0-alpha.0 → 2.236.0-alpha.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 (82) hide show
  1. package/lib/cjs/components/Tree/Tree.d.ts +9 -0
  2. package/lib/cjs/components/Tree/Tree.js +48 -0
  3. package/lib/cjs/components/Tree/Tree.mdx +58 -0
  4. package/lib/cjs/components/Tree/Tree.stories.js +786 -0
  5. package/lib/cjs/components/Tree/Tree.styles.d.ts +4 -0
  6. package/lib/cjs/components/Tree/Tree.styles.js +332 -0
  7. package/lib/cjs/components/Tree/Tree.test.js +300 -0
  8. package/lib/cjs/components/Tree/TreeItem.d.ts +22 -0
  9. package/lib/cjs/components/Tree/TreeItem.js +82 -0
  10. package/lib/cjs/components/Tree/TreeItemContent.d.ts +11 -0
  11. package/lib/cjs/components/Tree/TreeItemContent.js +102 -0
  12. package/lib/cjs/components/Tree/index.d.ts +5 -0
  13. package/lib/cjs/components/Tree/index.js +52 -0
  14. package/lib/cjs/components/Tree/useTreeDragAndDrop.d.ts +46 -0
  15. package/lib/cjs/components/Tree/useTreeDragAndDrop.js +76 -0
  16. package/lib/cjs/context/TooltipContext/index.js +2 -1
  17. package/lib/cjs/hooks/useCircularLoader/useCircularLoader.d.ts +1 -0
  18. package/lib/cjs/hooks/useCircularLoader/useCircularLoader.js +3 -2
  19. package/lib/cjs/hooks/useGetTheme/useGetTheme.d.ts +4 -0
  20. package/lib/cjs/hooks/useGridListItem/useGridListItem.d.ts +4 -4
  21. package/lib/cjs/hooks/useOverlayPanelState/useOverlayPanelState.test.js +3 -1
  22. package/lib/cjs/hooks/usePagination/usePagination.d.ts +8 -8
  23. package/lib/cjs/hooks/useStatusClasses/useStatusClasses.js +2 -8
  24. package/lib/cjs/index.d.ts +1 -0
  25. package/lib/cjs/index.js +43 -0
  26. package/lib/cjs/styles/themeOverrides/nextGenDarkMode/colors.d.ts +1 -0
  27. package/lib/cjs/styles/themeOverrides/nextGenDarkMode/colors.js +7 -1
  28. package/lib/cjs/styles/themeOverrides/nextGenDarkMode/customProperties/icons.d.ts +2 -0
  29. package/lib/cjs/styles/themeOverrides/nextGenDarkMode/customProperties/index.d.ts +2 -0
  30. package/lib/cjs/styles/themeOverrides/nextGenDarkMode/variants/buttons.d.ts +15 -0
  31. package/lib/cjs/styles/themeOverrides/nextGenDarkMode/variants/buttons.js +15 -0
  32. package/lib/cjs/styles/themeOverrides/nextGenDarkMode/variants/tree.d.ts +15 -0
  33. package/lib/cjs/styles/themeOverrides/nextGenDarkMode/variants/tree.js +160 -0
  34. package/lib/cjs/styles/themeOverrides/nextGenDarkMode/variants/variants.d.ts +9 -0
  35. package/lib/cjs/styles/themeOverrides/nextGenDarkMode/variants/variants.js +3 -1
  36. package/lib/cjs/styles/themeOverrides/onyxSideNav.d.ts +2 -0
  37. package/lib/cjs/styles/themes/astro/customProperties/icons.d.ts +2 -0
  38. package/lib/cjs/styles/themes/astro/customProperties/icons.js +3 -1
  39. package/lib/cjs/styles/themes/astro/customProperties/index.d.ts +2 -0
  40. package/lib/cjs/styles/themes/next-gen/convertedComponentList.js +1 -1
  41. package/lib/cjs/styles/themes/next-gen/customProperties/icons.d.ts +2 -0
  42. package/lib/cjs/styles/themes/next-gen/customProperties/icons.js +1 -1
  43. package/lib/cjs/styles/themes/next-gen/customProperties/index.d.ts +2 -0
  44. package/lib/cjs/styles/themes/next-gen/next-gen.d.ts +27 -0
  45. package/lib/cjs/styles/themes/next-gen/variants/button.d.ts +15 -0
  46. package/lib/cjs/styles/themes/next-gen/variants/button.js +11 -0
  47. package/lib/cjs/styles/themes/next-gen/variants/tree.d.ts +16 -0
  48. package/lib/cjs/styles/themes/next-gen/variants/tree.js +153 -0
  49. package/lib/cjs/styles/themes/next-gen/variants/variants.d.ts +10 -0
  50. package/lib/cjs/styles/themes/next-gen/variants/variants.js +2 -0
  51. package/lib/cjs/styles/variants/index.js +3 -1
  52. package/lib/cjs/styles/variants/variants.js +2 -0
  53. package/lib/cjs/utils/getStatusClasses.d.ts +13 -0
  54. package/lib/cjs/utils/getStatusClasses.js +29 -0
  55. package/lib/components/Tree/Tree.js +33 -0
  56. package/lib/components/Tree/Tree.mdx +58 -0
  57. package/lib/components/Tree/Tree.stories.js +775 -0
  58. package/lib/components/Tree/Tree.styles.js +325 -0
  59. package/lib/components/Tree/Tree.test.js +297 -0
  60. package/lib/components/Tree/TreeItem.js +70 -0
  61. package/lib/components/Tree/TreeItemContent.js +94 -0
  62. package/lib/components/Tree/index.js +5 -0
  63. package/lib/components/Tree/useTreeDragAndDrop.js +69 -0
  64. package/lib/context/TooltipContext/index.js +2 -1
  65. package/lib/hooks/useCircularLoader/useCircularLoader.js +3 -2
  66. package/lib/hooks/useOverlayPanelState/useOverlayPanelState.test.js +3 -1
  67. package/lib/hooks/useStatusClasses/useStatusClasses.js +2 -8
  68. package/lib/index.js +1 -0
  69. package/lib/styles/themeOverrides/nextGenDarkMode/colors.js +7 -1
  70. package/lib/styles/themeOverrides/nextGenDarkMode/variants/buttons.js +15 -0
  71. package/lib/styles/themeOverrides/nextGenDarkMode/variants/tree.js +154 -0
  72. package/lib/styles/themeOverrides/nextGenDarkMode/variants/variants.js +3 -1
  73. package/lib/styles/themes/astro/customProperties/icons.js +3 -1
  74. package/lib/styles/themes/next-gen/convertedComponentList.js +1 -1
  75. package/lib/styles/themes/next-gen/customProperties/icons.js +1 -1
  76. package/lib/styles/themes/next-gen/variants/button.js +11 -0
  77. package/lib/styles/themes/next-gen/variants/tree.js +147 -0
  78. package/lib/styles/themes/next-gen/variants/variants.js +2 -0
  79. package/lib/styles/variants/index.js +3 -1
  80. package/lib/styles/variants/variants.js +2 -0
  81. package/lib/utils/getStatusClasses.js +22 -0
  82. package/package.json +9 -6
@@ -0,0 +1,775 @@
1
+ import _Object$keys from "@babel/runtime-corejs3/core-js-stable/object/keys";
2
+ import _Object$getOwnPropertySymbols from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols";
3
+ import _filterInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/filter";
4
+ import _Object$getOwnPropertyDescriptor from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor";
5
+ import _Object$getOwnPropertyDescriptors from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors";
6
+ import _Object$defineProperties from "@babel/runtime-corejs3/core-js-stable/object/define-properties";
7
+ import _Object$defineProperty from "@babel/runtime-corejs3/core-js-stable/object/define-property";
8
+ import _Symbol from "@babel/runtime-corejs3/core-js-stable/symbol";
9
+ import _Object$create from "@babel/runtime-corejs3/core-js-stable/object/create";
10
+ import _bindInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/bind";
11
+ import _Object$getPrototypeOf from "@babel/runtime-corejs3/core-js-stable/object/get-prototype-of";
12
+ import _Object$setPrototypeOf from "@babel/runtime-corejs3/core-js-stable/object/set-prototype-of";
13
+ import _Symbol$asyncIterator from "@babel/runtime-corejs3/core-js-stable/symbol/async-iterator";
14
+ import _Symbol$iterator from "@babel/runtime-corejs3/core-js-stable/symbol/iterator";
15
+ import _reverseInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/reverse";
16
+ import _typeof from "@babel/runtime-corejs3/helpers/esm/typeof";
17
+ import _asyncToGenerator from "@babel/runtime-corejs3/helpers/esm/asyncToGenerator";
18
+ import _extends from "@babel/runtime-corejs3/helpers/esm/extends";
19
+ import _defineProperty from "@babel/runtime-corejs3/helpers/esm/defineProperty";
20
+ import _slicedToArray from "@babel/runtime-corejs3/helpers/esm/slicedToArray";
21
+ function _regeneratorRuntime() { "use strict"; var r = _regenerator(), e = r.m(_regeneratorRuntime), t = (_Object$getPrototypeOf ? _Object$getPrototypeOf(e) : e.__proto__).constructor; function n(r) { var e = "function" == typeof r && r.constructor; return !!e && (e === t || "GeneratorFunction" === (e.displayName || e.name)); } var o = { "throw": 1, "return": 2, "break": 3, "continue": 3 }; function a(r) { var e, t; return function (n) { e || (e = { stop: function stop() { return t(n.a, 2); }, "catch": function _catch() { return n.v; }, abrupt: function abrupt(r, e) { return t(n.a, o[r], e); }, delegateYield: function delegateYield(r, o, a) { return e.resultName = o, t(n.d, _regeneratorValues(r), a); }, finish: function finish(r) { return t(n.f, r); } }, t = function t(r, _t, o) { n.p = e.prev, n.n = e.next; try { return r(_t, o); } finally { e.next = n.n; } }), e.resultName && (e[e.resultName] = n.v, e.resultName = void 0), e.sent = n.v, e.next = n.n; try { return r.call(this, e); } finally { n.p = e.prev, n.n = e.next; } }; } return (_regeneratorRuntime = function _regeneratorRuntime() { return { wrap: function wrap(e, t, n, o) { return r.w(a(e), t, n, o && _reverseInstanceProperty(o).call(o)); }, isGeneratorFunction: n, mark: r.m, awrap: function awrap(r, e) { return new _OverloadYield(r, e); }, AsyncIterator: _regeneratorAsyncIterator, async: function async(r, e, t, o, u) { return (n(e) ? _regeneratorAsyncGen : _regeneratorAsync)(a(r), e, t, o, u); }, keys: _regeneratorKeys, values: _regeneratorValues }; })(); }
22
+ function _regeneratorValues(e) { if (null != e) { var t = e["function" == typeof _Symbol && _Symbol$iterator || "@@iterator"], r = 0; if (t) return t.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) return { next: function next() { return e && r >= e.length && (e = void 0), { value: e && e[r++], done: !e }; } }; } throw new TypeError(_typeof(e) + " is not iterable"); }
23
+ function _regeneratorKeys(e) { var n = Object(e), r = []; for (var t in n) r.unshift(t); return function e() { for (; r.length;) if ((t = r.pop()) in n) return e.value = t, e.done = !1, e; return e.done = !0, e; }; }
24
+ function _regeneratorAsync(n, e, r, t, o) { var a = _regeneratorAsyncGen(n, e, r, t, o); return a.next().then(function (n) { return n.done ? n.value : a.next(); }); }
25
+ function _regeneratorAsyncGen(r, e, t, o, n) { return new _regeneratorAsyncIterator(_regenerator().w(r, e, t, o), n || _Promise); }
26
+ function _regeneratorAsyncIterator(t, e) { function n(r, o, i, f) { try { var c = t[r](o), u = c.value; return u instanceof _OverloadYield ? e.resolve(u.v).then(function (t) { n("next", t, i, f); }, function (t) { n("throw", t, i, f); }) : e.resolve(u).then(function (t) { c.value = t, i(c); }, function (t) { return n("throw", t, i, f); }); } catch (t) { f(t); } } var r; this.next || (_regeneratorDefine2(_regeneratorAsyncIterator.prototype), _regeneratorDefine2(_regeneratorAsyncIterator.prototype, "function" == typeof _Symbol && _Symbol$asyncIterator || "@asyncIterator", function () { return this; })), _regeneratorDefine2(this, "_invoke", function (t, o, i) { function f() { return new e(function (e, r) { n(t, i, e, r); }); } return r = r ? r.then(f, f) : f(); }, !0); }
27
+ function _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof _Symbol ? _Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = _Object$create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: _bindInstanceProperty(d).call(d, e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = _Object$getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = _Object$create(c); function f(e) { return _Object$setPrototypeOf ? _Object$setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = _Object$create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }
28
+ function _regeneratorDefine2(e, r, n, t) { var i = _Object$defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }
29
+ function _OverloadYield(e, d) { this.v = e, this.k = d; }
30
+ function ownKeys(e, r) { var t = _Object$keys(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = _filterInstanceProperty(o).call(o, function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
31
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var _context9, _context0; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty(_context9 = ownKeys(Object(t), !0)).call(_context9, function (r) { _defineProperty(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : _forEachInstanceProperty(_context0 = ownKeys(Object(t))).call(_context0, function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; }
32
+ import _concatInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/concat";
33
+ import _mapInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/map";
34
+ import _Set from "@babel/runtime-corejs3/core-js-stable/set";
35
+ import _Promise from "@babel/runtime-corejs3/core-js-stable/promise";
36
+ import _setTimeout from "@babel/runtime-corejs3/core-js-stable/set-timeout";
37
+ import _findInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/find";
38
+ import _Array$from from "@babel/runtime-corejs3/core-js-stable/array/from";
39
+ import _someInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/some";
40
+ import _keysInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/keys";
41
+ import _forEachInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/for-each";
42
+ import React, { useState } from 'react';
43
+ import { useTreeData } from 'react-aria-components/useTreeData';
44
+ import AlertCircleIcon from '@pingux/mdi-react/AlertCircleIcon';
45
+ import CheckCircleIcon from '@pingux/mdi-react/CheckCircleIcon';
46
+ import FormatListGroupIcon from '@pingux/mdi-react/FormatListGroupIcon';
47
+ import PaperclipIcon from '@pingux/mdi-react/PaperclipIcon';
48
+ import RefreshIcon from '@pingux/mdi-react/RefreshIcon';
49
+ import DocsLayout from '../../../.storybook/storybookDocsLayout';
50
+ import { Box, Icon, IconButton, Loader, Text, Tree, TreeItem, TreeItemContent, TreeLoadMoreItem, useTreeDragAndDrop } from '../../index';
51
+ import TreeReadme from './Tree.mdx';
52
+ import { jsx as ___EmotionJSX } from "@emotion/react";
53
+ export default {
54
+ title: 'Components/Tree',
55
+ component: Tree,
56
+ parameters: {
57
+ docs: {
58
+ page: function page() {
59
+ return ___EmotionJSX(React.Fragment, null, ___EmotionJSX(TreeReadme, null), ___EmotionJSX(DocsLayout, null));
60
+ }
61
+ }
62
+ }
63
+ };
64
+ export var StaticNestedTree = function StaticNestedTree() {
65
+ return ___EmotionJSX(Box, null, ___EmotionJSX(Tree, {
66
+ "aria-label": "Static files"
67
+ }, ___EmotionJSX(TreeItem, {
68
+ textValue: "Documents"
69
+ }, ___EmotionJSX(TreeItemContent, null, ___EmotionJSX(Text, null, "Documents")), ___EmotionJSX(TreeItem, {
70
+ textValue: "Reports"
71
+ }, ___EmotionJSX(TreeItemContent, null, ___EmotionJSX(Text, null, "Reports"))), ___EmotionJSX(TreeItem, {
72
+ textValue: "Policies"
73
+ }, ___EmotionJSX(TreeItemContent, null, ___EmotionJSX(Text, null, "Policies")))), ___EmotionJSX(TreeItem, {
74
+ textValue: "Downloads"
75
+ }, ___EmotionJSX(TreeItemContent, null, ___EmotionJSX(Text, null, "Downloads")))));
76
+ };
77
+ StaticNestedTree.parameters = {
78
+ docs: {
79
+ description: {
80
+ story: 'The simplest usage: declare TreeItem children directly with nested TreeItems for sub-levels. Best for small, fixed trees that do not change at runtime.'
81
+ }
82
+ }
83
+ };
84
+ export var DynamicRecursiveTree = function DynamicRecursiveTree() {
85
+ var initiallyExpandedKeys = ['projects', 'resources'];
86
+ var items = [{
87
+ id: 'projects',
88
+ name: 'Projects',
89
+ children: [{
90
+ id: 'astro',
91
+ name: 'Astro',
92
+ children: [{
93
+ id: 'components',
94
+ name: 'Components'
95
+ }]
96
+ }, {
97
+ id: 'onyx',
98
+ name: 'Onyx'
99
+ }]
100
+ }, {
101
+ id: 'resources',
102
+ name: 'Resources',
103
+ children: [{
104
+ id: 'guides',
105
+ name: 'Guides',
106
+ children: [{
107
+ id: 'getting-started',
108
+ name: 'Getting Started'
109
+ }]
110
+ }, {
111
+ id: 'examples',
112
+ name: 'Examples'
113
+ }]
114
+ }];
115
+ var _renderItem = function renderItem(item) {
116
+ var _item$children, _item$children2;
117
+ return ___EmotionJSX(TreeItem, {
118
+ key: item.id,
119
+ id: item.id,
120
+ textValue: item.name,
121
+ hasChildItems: Boolean((_item$children = item.children) === null || _item$children === void 0 ? void 0 : _item$children.length)
122
+ }, ___EmotionJSX(TreeItemContent, null, function (_ref) {
123
+ var _context, _context2;
124
+ var isExpanded = _ref.isExpanded,
125
+ level = _ref.level;
126
+ return ___EmotionJSX(Box, null, ___EmotionJSX(Text, null, _concatInstanceProperty(_context = _concatInstanceProperty(_context2 = "".concat(item.name, " (")).call(_context2, isExpanded ? 'expanded' : 'collapsed', ", level ")).call(_context, level, ")")));
127
+ }), (_item$children2 = item.children) === null || _item$children2 === void 0 ? void 0 : _mapInstanceProperty(_item$children2).call(_item$children2, _renderItem));
128
+ };
129
+ return ___EmotionJSX(Box, null, ___EmotionJSX(Tree, {
130
+ "aria-label": "Dynamic projects",
131
+ items: items,
132
+ defaultExpandedKeys: initiallyExpandedKeys
133
+ }, _renderItem));
134
+ };
135
+ DynamicRecursiveTree.parameters = {
136
+ docs: {
137
+ description: {
138
+ story: 'Pass a nested array via the `items` prop and render each node recursively with a render function. Use this for trees backed by data — each TreeItem gets `hasChildItems` from the node so the chevron renders correctly.'
139
+ }
140
+ }
141
+ };
142
+ var richItems = [{
143
+ id: 'production',
144
+ name: 'Policies',
145
+ status: 'Healthy',
146
+ color: 'blue',
147
+ children: [{
148
+ id: 'registration',
149
+ name: 'Registration',
150
+ status: 'Healthy',
151
+ color: 'blue',
152
+ locked: true,
153
+ children: [{
154
+ id: 'registration-a',
155
+ name: 'Registration A',
156
+ status: 'Healthy',
157
+ color: 'indigo',
158
+ locked: true
159
+ }, {
160
+ id: 'registration-b',
161
+ name: 'Registration B',
162
+ status: 'Healthy',
163
+ color: 'indigo',
164
+ locked: true
165
+ }]
166
+ }, {
167
+ id: 'authentication',
168
+ name: 'Authentication',
169
+ status: 'Needs review',
170
+ color: 'blue',
171
+ locked: true
172
+ }, {
173
+ id: 'other',
174
+ name: 'Other',
175
+ status: 'In progress',
176
+ color: 'blue'
177
+ }]
178
+ }, {
179
+ id: 'staging',
180
+ name: 'Single Item',
181
+ status: 'In progress',
182
+ color: 'indigo'
183
+ }];
184
+ export var Selection = function Selection(_ref2) {
185
+ var selectionMode = _ref2.selectionMode,
186
+ selectionBehavior = _ref2.selectionBehavior;
187
+ var _useState = useState(richItems),
188
+ _useState2 = _slicedToArray(_useState, 1),
189
+ items = _useState2[0];
190
+ var _renderItem2 = function renderItem(item) {
191
+ var _item$children3, _item$children4;
192
+ return ___EmotionJSX(TreeItem, {
193
+ key: item.id,
194
+ id: item.id,
195
+ textValue: item.name,
196
+ hasChildItems: Boolean((_item$children3 = item.children) === null || _item$children3 === void 0 ? void 0 : _item$children3.length)
197
+ }, ___EmotionJSX(TreeItemContent, null, item.name), (_item$children4 = item.children) === null || _item$children4 === void 0 ? void 0 : _mapInstanceProperty(_item$children4).call(_item$children4, _renderItem2));
198
+ };
199
+ var productionExpandedKeys = ['production', 'registration'];
200
+ return ___EmotionJSX(Tree, {
201
+ "aria-label": "Selection example",
202
+ items: items,
203
+ selectionMode: selectionMode,
204
+ selectionBehavior: selectionBehavior,
205
+ defaultSelectedKeys: selectionMode === 'none' ? undefined : ['registration-a'],
206
+ defaultExpandedKeys: productionExpandedKeys
207
+ }, function (item) {
208
+ return _renderItem2(item);
209
+ });
210
+ };
211
+ Selection.parameters = {
212
+ docs: {
213
+ description: {
214
+ story: 'Uncontrolled selection: the tree manages selection internally from `defaultSelectedKeys` (seeded with registration-a). Use the Controls panel to try `selectionMode` and `selectionBehavior` combinations. For selection that lives in app state, pass `selectedKeys`/`onSelectionChange` instead of `defaultSelectedKeys`.'
215
+ }
216
+ }
217
+ };
218
+ Selection.args = {
219
+ selectionMode: 'multiple',
220
+ selectionBehavior: 'toggle'
221
+ };
222
+ Selection.argTypes = {
223
+ selectionMode: {
224
+ control: 'radio',
225
+ options: ['none', 'single', 'multiple'],
226
+ description: 'Whether none, one, or many items can be selected.'
227
+ },
228
+ selectionBehavior: {
229
+ control: 'radio',
230
+ options: ['toggle', 'replace'],
231
+ description: 'How multiple selection responds to pointer/keyboard selection: toggle adds to the selection, replace swaps it.'
232
+ }
233
+ };
234
+ export var DisabledItems = function DisabledItems(_ref3) {
235
+ var disabledBehavior = _ref3.disabledBehavior;
236
+ var _useState3 = useState(richItems),
237
+ _useState4 = _slicedToArray(_useState3, 1),
238
+ items = _useState4[0];
239
+ var disabledItemKeys = ['staging'];
240
+ var productionExpandedKeys = ['production'];
241
+ var _renderDisabledItem = function renderDisabledItem(item) {
242
+ var _item$children5, _item$children6;
243
+ return ___EmotionJSX(TreeItem, {
244
+ key: item.id,
245
+ id: item.id,
246
+ textValue: item.name,
247
+ hasChildItems: Boolean((_item$children5 = item.children) === null || _item$children5 === void 0 ? void 0 : _item$children5.length),
248
+ isDisabled: item.id === 'staging'
249
+ }, ___EmotionJSX(TreeItemContent, null, item.name), (_item$children6 = item.children) === null || _item$children6 === void 0 ? void 0 : _mapInstanceProperty(_item$children6).call(_item$children6, _renderDisabledItem));
250
+ };
251
+ return ___EmotionJSX(Box, null, ___EmotionJSX(Text, {
252
+ as: "p"
253
+ }, "Single Item is disabled. With", ' ', ___EmotionJSX("code", null, "disabledBehavior=\"", disabledBehavior, "\""), ", a disabled item is", ' ', disabledBehavior === 'all' ? 'inert — it cannot be selected, expanded, or focused.' : 'blocked from selection only, but can still be expanded and focused.'), ___EmotionJSX(Tree, {
254
+ "aria-label": "Tree with disabled items",
255
+ items: items,
256
+ selectionMode: "multiple",
257
+ disabledKeys: disabledItemKeys,
258
+ disabledBehavior: disabledBehavior,
259
+ defaultExpandedKeys: productionExpandedKeys
260
+ }, function (item) {
261
+ return _renderDisabledItem(item);
262
+ }));
263
+ };
264
+ DisabledItems.args = {
265
+ disabledBehavior: 'all'
266
+ };
267
+ DisabledItems.argTypes = {
268
+ disabledBehavior: {
269
+ control: 'radio',
270
+ options: ['selection', 'all'],
271
+ description: 'Whether disabledKeys blocks selection only, or all interactions.'
272
+ }
273
+ };
274
+ DisabledItems.parameters = {
275
+ docs: {
276
+ description: {
277
+ story: 'Mark an item disabled with `isDisabled` on its TreeItem. Use the control to compare `disabledBehavior="selection"` (item can still expand and focus) with `disabledBehavior="all"` (item is fully inert).'
278
+ }
279
+ }
280
+ };
281
+ export var CustomItemContent = function CustomItemContent() {
282
+ var _useState5 = useState(richItems),
283
+ _useState6 = _slicedToArray(_useState5, 2),
284
+ items = _useState6[0],
285
+ setItems = _useState6[1];
286
+ var updateItem = function updateItem(id, update) {
287
+ var _updateItems = function updateItems(nodes) {
288
+ return _mapInstanceProperty(nodes).call(nodes, function (node) {
289
+ if (node.id === id) return update(node);
290
+ return node.children ? _objectSpread(_objectSpread({}, node), {}, {
291
+ children: _updateItems(node.children)
292
+ }) : node;
293
+ });
294
+ };
295
+ setItems(_updateItems);
296
+ };
297
+ var refreshItem = function refreshItem(id) {
298
+ updateItem(id, function (item) {
299
+ return _objectSpread(_objectSpread({}, item), {}, {
300
+ status: 'In progress'
301
+ });
302
+ });
303
+ };
304
+ var statusIconProps = function statusIconProps(item) {
305
+ return {
306
+ icon: item.color === 'indigo' ? FormatListGroupIcon : PaperclipIcon,
307
+ sx: {
308
+ width: '24px',
309
+ height: '24px',
310
+ minWidth: '24px',
311
+ minHeight: '24px',
312
+ p: '3px',
313
+ borderRadius: '100px',
314
+ boxSizing: 'border-box',
315
+ bg: item.color === 'indigo' ? 'avatar.indigo.bg' : 'avatar.blue.bg',
316
+ color: item.color === 'indigo' ? 'avatar.indigo.text' : 'gray.600',
317
+ '& svg': {
318
+ fill: 'currentColor'
319
+ }
320
+ }
321
+ };
322
+ };
323
+ var _renderEnvironmentItem = function renderEnvironmentItem(item) {
324
+ var _context3, _item$children7, _item$children8;
325
+ return ___EmotionJSX(TreeItem, {
326
+ key: item.id,
327
+ id: item.id,
328
+ textValue: _concatInstanceProperty(_context3 = "".concat(item.name, " ")).call(_context3, item.status || ''),
329
+ hasChildItems: Boolean((_item$children7 = item.children) === null || _item$children7 === void 0 ? void 0 : _item$children7.length),
330
+ showDefaultIcon: false,
331
+ showDefaultLock: false
332
+ }, ___EmotionJSX(Icon, _extends({}, statusIconProps(item), {
333
+ "aria-hidden": "true"
334
+ })), ___EmotionJSX(Text, {
335
+ sx: {
336
+ flexShrink: 0
337
+ }
338
+ }, item.name), item.status === 'Healthy' ? ___EmotionJSX(Icon, {
339
+ icon: CheckCircleIcon,
340
+ "aria-label": "Healthy",
341
+ size: "sm",
342
+ sx: {
343
+ color: 'success.bright'
344
+ }
345
+ }) : ___EmotionJSX(Icon, {
346
+ icon: AlertCircleIcon,
347
+ "aria-label": item.status,
348
+ size: "sm",
349
+ sx: {
350
+ color: 'warning.bright'
351
+ }
352
+ }), ___EmotionJSX(IconButton, {
353
+ "aria-label": "Refresh ".concat(item.name),
354
+ sx: {
355
+ ml: 'auto',
356
+ alignSelf: 'center',
357
+ width: '24px',
358
+ height: '24px',
359
+ '&.is-focused': {
360
+ outline: 'none'
361
+ },
362
+ '&:focus-visible': {
363
+ outline: 'none'
364
+ }
365
+ },
366
+ onClick: function onClick(event) {
367
+ event.stopPropagation();
368
+ refreshItem(item.id);
369
+ }
370
+ }, ___EmotionJSX(Icon, {
371
+ icon: RefreshIcon,
372
+ "aria-hidden": "true"
373
+ })), (_item$children8 = item.children) === null || _item$children8 === void 0 ? void 0 : _mapInstanceProperty(_item$children8).call(_item$children8, _renderEnvironmentItem));
374
+ };
375
+ return ___EmotionJSX(Tree, {
376
+ "aria-label": "Environments",
377
+ items: items
378
+ }, _renderEnvironmentItem);
379
+ };
380
+ CustomItemContent.parameters = {
381
+ docs: {
382
+ description: {
383
+ story: 'TreeItem children render directly as row content — no TreeItemContent wrapper needed. The default row scaffolding (selection checkbox, expand chevron) is still provided, while the built-in folder/file and lock icons are turned off with showDefaultIcon and showDefaultLock. Row actions do not select or expand the row because each handler calls event.stopPropagation().'
384
+ }
385
+ }
386
+ };
387
+ export var AsyncChildLoading = function AsyncChildLoading() {
388
+ var _useState7 = useState([{
389
+ id: 'region-us',
390
+ name: 'US Region',
391
+ hasLoadedChildren: false,
392
+ canLoadMore: true
393
+ }, {
394
+ id: 'region-eu',
395
+ name: 'EU Region',
396
+ hasLoadedChildren: false,
397
+ canLoadMore: true
398
+ }, {
399
+ id: 'single-tenant',
400
+ name: 'Single Tenant'
401
+ }]),
402
+ _useState8 = _slicedToArray(_useState7, 2),
403
+ items = _useState8[0],
404
+ setItems = _useState8[1];
405
+ var _useState9 = useState(new _Set()),
406
+ _useState0 = _slicedToArray(_useState9, 2),
407
+ loadingKeys = _useState0[0],
408
+ setLoadingKeys = _useState0[1];
409
+ var _useState1 = useState(new _Set()),
410
+ _useState10 = _slicedToArray(_useState1, 2),
411
+ expandedKeys = _useState10[0],
412
+ setExpandedKeys = _useState10[1];
413
+ var loadChildren = /*#__PURE__*/function () {
414
+ var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(parent) {
415
+ return _regeneratorRuntime().wrap(function _callee$(_context4) {
416
+ while (1) switch (_context4.prev = _context4.next) {
417
+ case 0:
418
+ _context4.next = 2;
419
+ return new _Promise(function (resolve) {
420
+ return _setTimeout(resolve, 1000);
421
+ });
422
+ case 2:
423
+ return _context4.abrupt("return", [{
424
+ id: "".concat(parent.id, "-child-1"),
425
+ name: "".concat(parent.name, " Tenant 1")
426
+ }, {
427
+ id: "".concat(parent.id, "-child-2"),
428
+ name: "".concat(parent.name, " Tenant 2")
429
+ }]);
430
+ case 3:
431
+ case "end":
432
+ return _context4.stop();
433
+ }
434
+ }, _callee);
435
+ }));
436
+ return function loadChildren(_x) {
437
+ return _ref4.apply(this, arguments);
438
+ };
439
+ }();
440
+ var handleExpandedChange = /*#__PURE__*/function () {
441
+ var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(keys) {
442
+ var _context5;
443
+ var newlyExpanded, parent, children;
444
+ return _regeneratorRuntime().wrap(function _callee2$(_context6) {
445
+ while (1) switch (_context6.prev = _context6.next) {
446
+ case 0:
447
+ setExpandedKeys(keys);
448
+ newlyExpanded = _findInstanceProperty(_context5 = _Array$from(keys)).call(_context5, function (key) {
449
+ return !loadingKeys.has(key) && _someInstanceProperty(items).call(items, function (item) {
450
+ return item.id === key && !item.hasLoadedChildren;
451
+ });
452
+ });
453
+ if (!newlyExpanded) {
454
+ _context6.next = 16;
455
+ break;
456
+ }
457
+ setLoadingKeys(function (prev) {
458
+ return new _Set(prev).add(newlyExpanded);
459
+ });
460
+
461
+ // Show a placeholder loading row while children are being fetched.
462
+ setItems(function (currentItems) {
463
+ return _mapInstanceProperty(currentItems).call(currentItems, function (item) {
464
+ return item.id === newlyExpanded ? _objectSpread(_objectSpread({}, item), {}, {
465
+ children: [{
466
+ id: "".concat(item.id, "-loading"),
467
+ name: "Loading ".concat(item.name, " children"),
468
+ isPendingRow: true
469
+ }]
470
+ }) : item;
471
+ });
472
+ });
473
+ parent = _findInstanceProperty(items).call(items, function (item) {
474
+ return item.id === newlyExpanded;
475
+ });
476
+ if (!parent) {
477
+ _context6.next = 12;
478
+ break;
479
+ }
480
+ _context6.next = 9;
481
+ return loadChildren(parent);
482
+ case 9:
483
+ _context6.t0 = _context6.sent;
484
+ _context6.next = 13;
485
+ break;
486
+ case 12:
487
+ _context6.t0 = [];
488
+ case 13:
489
+ children = _context6.t0;
490
+ setItems(function (currentItems) {
491
+ return _mapInstanceProperty(currentItems).call(currentItems, function (item) {
492
+ return item.id === newlyExpanded ? _objectSpread(_objectSpread({}, item), {}, {
493
+ children: children,
494
+ hasLoadedChildren: true
495
+ }) : item;
496
+ });
497
+ });
498
+ setLoadingKeys(function (prev) {
499
+ var next = new _Set(prev);
500
+ next["delete"](newlyExpanded);
501
+ return next;
502
+ });
503
+ case 16:
504
+ case "end":
505
+ return _context6.stop();
506
+ }
507
+ }, _callee2);
508
+ }));
509
+ return function handleExpandedChange(_x2) {
510
+ return _ref5.apply(this, arguments);
511
+ };
512
+ }();
513
+ var _renderAsyncItem = function renderAsyncItem(item) {
514
+ var _item$children9, _item$children0, _item$children1;
515
+ return ___EmotionJSX(TreeItem, {
516
+ key: item.id,
517
+ id: item.id,
518
+ textValue: item.name,
519
+ hasChildItems: Boolean((_item$children9 = item.children) === null || _item$children9 === void 0 ? void 0 : _item$children9.length) || item.canLoadMore
520
+ }, item.isPendingRow ? ___EmotionJSX(TreeItemContent, {
521
+ showDefaultIcon: false,
522
+ showDefaultLock: false
523
+ }, ___EmotionJSX(Loader, {
524
+ "aria-label": "Loading ".concat(item.name),
525
+ sx: {
526
+ p: 'xs'
527
+ }
528
+ })) : ___EmotionJSX(TreeItemContent, null, ___EmotionJSX(Box, {
529
+ isRow: true,
530
+ flexDirection: "row",
531
+ style: {
532
+ display: 'flex',
533
+ flexDirection: 'row',
534
+ alignItems: 'center',
535
+ flexWrap: 'nowrap',
536
+ whiteSpace: 'nowrap',
537
+ minWidth: 'max-content'
538
+ },
539
+ sx: {
540
+ gap: 'sm',
541
+ alignItems: 'center'
542
+ }
543
+ }, ___EmotionJSX(Text, {
544
+ as: "span",
545
+ sx: {
546
+ flex: '0 0 auto',
547
+ whiteSpace: 'nowrap'
548
+ }
549
+ }, item.name))), (_item$children0 = item.children) === null || _item$children0 === void 0 ? void 0 : _mapInstanceProperty(_item$children0).call(_item$children0, function (child) {
550
+ return _renderAsyncItem(child);
551
+ }), item.canLoadMore && !item.hasLoadedChildren && !((_item$children1 = item.children) !== null && _item$children1 !== void 0 && _item$children1.length) && ___EmotionJSX(TreeLoadMoreItem, {
552
+ onLoadMore: function onLoadMore() {
553
+ setLoadingKeys(function (prev) {
554
+ return new _Set(prev).add(item.id);
555
+ });
556
+ loadChildren(item).then(function (children) {
557
+ setItems(function (currentItems) {
558
+ return _mapInstanceProperty(currentItems).call(currentItems, function (node) {
559
+ return node.id === item.id ? _objectSpread(_objectSpread({}, node), {}, {
560
+ children: children,
561
+ hasLoadedChildren: true
562
+ }) : node;
563
+ });
564
+ });
565
+ setLoadingKeys(function (prev) {
566
+ var next = new _Set(prev);
567
+ next["delete"](item.id);
568
+ return next;
569
+ });
570
+ });
571
+ }
572
+ }));
573
+ };
574
+ return ___EmotionJSX(Box, null, ___EmotionJSX(Text, {
575
+ as: "p"
576
+ }, "Expand a region to load its tenants asynchronously"), ___EmotionJSX(Tree, {
577
+ "aria-label": "Async regions",
578
+ items: items,
579
+ expandedKeys: expandedKeys,
580
+ onExpandedChange: handleExpandedChange,
581
+ renderEmptyState: function renderEmptyState() {
582
+ return ___EmotionJSX(Loader, {
583
+ "aria-label": "Loading items",
584
+ sx: {
585
+ p: 'sm'
586
+ }
587
+ });
588
+ }
589
+ }, _renderAsyncItem));
590
+ };
591
+ AsyncChildLoading.parameters = {
592
+ docs: {
593
+ description: {
594
+ story: 'Lazily loads children on expand: hook `onExpandedChange`, fetch the parent\'s children, then merge them into the `items` state. A `Loader` shows next to the expanding row and via `renderEmptyState` while items load, and `TreeLoadMoreItem` provides a "load more" affordance for the same pattern.'
595
+ }
596
+ }
597
+ };
598
+ var makeIsDescendant = function makeIsDescendant(tree) {
599
+ return function (key, ofKey) {
600
+ var node = tree.getItem(key);
601
+ while (node) {
602
+ if (node.key === ofKey) return true;
603
+ node = node.parentKey != null ? tree.getItem(node.parentKey) : undefined;
604
+ }
605
+ return false;
606
+ };
607
+ };
608
+ var dragInitialItems = [{
609
+ id: 'environments',
610
+ name: 'Environments',
611
+ children: [{
612
+ id: 'dev',
613
+ name: 'Development',
614
+ isDragDisabled: true
615
+ }, {
616
+ id: 'qa',
617
+ name: 'QA'
618
+ }]
619
+ }, {
620
+ id: 'tenants',
621
+ name: 'Tenants',
622
+ children: [{
623
+ id: 'tenant-1',
624
+ name: 'Tenant 1'
625
+ }]
626
+ }, {
627
+ id: 'shared-services',
628
+ name: 'Shared Services'
629
+ }];
630
+ export var DragAndDrop = function DragAndDrop() {
631
+ var initiallyExpandedKeys = ['environments', 'tenants'];
632
+ var tree = useTreeData({
633
+ initialItems: dragInitialItems,
634
+ getKey: function getKey(item) {
635
+ return item.id;
636
+ },
637
+ getChildren: function getChildren(item) {
638
+ var _item$children10;
639
+ return (_item$children10 = item.children) !== null && _item$children10 !== void 0 ? _item$children10 : [];
640
+ }
641
+ });
642
+ var isDescendant = makeIsDescendant(tree);
643
+ var _useTreeDragAndDrop = useTreeDragAndDrop({
644
+ getItems: function getItems(keys, items) {
645
+ return _mapInstanceProperty(items).call(items, function (item) {
646
+ return {
647
+ 'text/plain': item.value.name
648
+ };
649
+ });
650
+ },
651
+ isDescendant: isDescendant,
652
+ isDisabledDropTarget: function isDisabledDropTarget(key) {
653
+ var _tree$getItem;
654
+ return Boolean((_tree$getItem = tree.getItem(key)) === null || _tree$getItem === void 0 ? void 0 : _tree$getItem.value.isDragDisabled);
655
+ },
656
+ onItemDrop: function onItemDrop(_ref6) {
657
+ var _context7;
658
+ var keys = _keysInstanceProperty(_ref6),
659
+ targetKey = _ref6.targetKey;
660
+ var targetNode = tree.getItem(targetKey);
661
+ var targetIndex = targetNode !== null && targetNode !== void 0 && targetNode.children ? targetNode.children.length : 0;
662
+ _forEachInstanceProperty(_context7 = _Array$from(keys)).call(_context7, function (key, index) {
663
+ tree.move(key, targetKey, targetIndex + index);
664
+ });
665
+ },
666
+ onReorder: function onReorder(_ref7) {
667
+ var keys = _keysInstanceProperty(_ref7),
668
+ targetKey = _ref7.targetKey,
669
+ dropPosition = _ref7.dropPosition;
670
+ if (dropPosition === 'before') {
671
+ tree.moveBefore(targetKey, keys);
672
+ } else {
673
+ tree.moveAfter(targetKey, keys);
674
+ }
675
+ }
676
+ }),
677
+ dragAndDropHooks = _useTreeDragAndDrop.dragAndDropHooks;
678
+ var _renderDragItem = function renderDragItem(item) {
679
+ var _item$children11, _item$children12;
680
+ return ___EmotionJSX(TreeItem, {
681
+ key: item.key,
682
+ id: item.key,
683
+ textValue: item.value.name,
684
+ isDisabled: item.value.isDragDisabled,
685
+ hasChildItems: Boolean((_item$children11 = item.children) === null || _item$children11 === void 0 ? void 0 : _item$children11.length)
686
+ }, ___EmotionJSX(TreeItemContent, null, item.value.name), (_item$children12 = item.children) === null || _item$children12 === void 0 ? void 0 : _mapInstanceProperty(_item$children12).call(_item$children12, _renderDragItem));
687
+ };
688
+ return ___EmotionJSX(Box, null, ___EmotionJSX(Text, {
689
+ as: "p"
690
+ }, "Drag an item onto another to make it a child, or between siblings to reorder. Keyboard dragging works too: focus the drag handle, press Enter to start a drag session, arrow to a target, and Enter again to drop. Self-drops, descendant drops, and the disabled Development item are rejected."), ___EmotionJSX(Tree, {
691
+ "aria-label": "Draggable services",
692
+ selectionMode: "multiple",
693
+ items: tree.items,
694
+ dragAndDropHooks: dragAndDropHooks,
695
+ defaultExpandedKeys: initiallyExpandedKeys
696
+ }, function (item) {
697
+ return _renderDragItem(item);
698
+ }));
699
+ };
700
+ DragAndDrop.parameters = {
701
+ docs: {
702
+ description: {
703
+ story: 'Full drag-and-drop via `useTreeDragAndDrop`: `onItemDrop` re-parents items dropped onto a target, `onReorder` moves items before/after siblings (backed by `useTreeData`\'s `move`/`moveBefore`/`moveAfter`). Self-drops, descendant/cycle drops, and disabled targets are rejected automatically.'
704
+ }
705
+ }
706
+ };
707
+ export var DragAndDropReparentOnly = function DragAndDropReparentOnly() {
708
+ var initiallyExpandedKeys = ['environments', 'tenants'];
709
+ var tree = useTreeData({
710
+ initialItems: dragInitialItems,
711
+ getKey: function getKey(item) {
712
+ return item.id;
713
+ },
714
+ getChildren: function getChildren(item) {
715
+ var _item$children13;
716
+ return (_item$children13 = item.children) !== null && _item$children13 !== void 0 ? _item$children13 : [];
717
+ }
718
+ });
719
+ var isDescendant = makeIsDescendant(tree);
720
+
721
+ // No onReorder handler: before/after drops become no-ops, drop-on still re-parents.
722
+ var _useTreeDragAndDrop2 = useTreeDragAndDrop({
723
+ getItems: function getItems(keys, items) {
724
+ return _mapInstanceProperty(items).call(items, function (item) {
725
+ return {
726
+ 'text/plain': item.value.name
727
+ };
728
+ });
729
+ },
730
+ isDescendant: isDescendant,
731
+ isDisabledDropTarget: function isDisabledDropTarget(key) {
732
+ var _tree$getItem2;
733
+ return Boolean((_tree$getItem2 = tree.getItem(key)) === null || _tree$getItem2 === void 0 ? void 0 : _tree$getItem2.value.isDragDisabled);
734
+ },
735
+ onItemDrop: function onItemDrop(_ref8) {
736
+ var _context8;
737
+ var keysToMove = _keysInstanceProperty(_ref8),
738
+ targetKey = _ref8.targetKey;
739
+ var targetNode = tree.getItem(targetKey);
740
+ var targetIndex = targetNode !== null && targetNode !== void 0 && targetNode.children ? targetNode.children.length : 0;
741
+ _forEachInstanceProperty(_context8 = _Array$from(keysToMove)).call(_context8, function (key, index) {
742
+ tree.move(key, targetKey, targetIndex + index);
743
+ });
744
+ }
745
+ }),
746
+ dragAndDropHooks = _useTreeDragAndDrop2.dragAndDropHooks;
747
+ var _renderDragItem2 = function renderDragItem(item) {
748
+ var _item$children14, _item$children15;
749
+ return ___EmotionJSX(TreeItem, {
750
+ key: item.key,
751
+ id: item.key,
752
+ textValue: item.value.name,
753
+ isDisabled: item.value.isDragDisabled,
754
+ hasChildItems: Boolean((_item$children14 = item.children) === null || _item$children14 === void 0 ? void 0 : _item$children14.length)
755
+ }, ___EmotionJSX(TreeItemContent, null, item.value.name), (_item$children15 = item.children) === null || _item$children15 === void 0 ? void 0 : _mapInstanceProperty(_item$children15).call(_item$children15, _renderDragItem2));
756
+ };
757
+ return ___EmotionJSX(Box, null, ___EmotionJSX(Text, {
758
+ as: "p"
759
+ }, "Drop-on only: dragging an item onto another re-parents it. Sibling reordering is disabled \u2014 no", ' ', ___EmotionJSX("code", null, "onReorder"), ' ', "handler is supplied, so dropping between siblings does nothing. Keyboard flow: focus the drag handle, Enter to start the drag session, arrows to a target (only drop-on targets are offered), Enter to drop. Self-drops, descendant drops, and the disabled Development item are rejected."), ___EmotionJSX(Tree, {
760
+ "aria-label": "Draggable services (re-parent only)",
761
+ selectionMode: "multiple",
762
+ items: tree.items,
763
+ dragAndDropHooks: dragAndDropHooks,
764
+ defaultExpandedKeys: initiallyExpandedKeys
765
+ }, function (item) {
766
+ return _renderDragItem2(item);
767
+ }));
768
+ };
769
+ DragAndDropReparentOnly.parameters = {
770
+ docs: {
771
+ description: {
772
+ story: 'Same setup as DragAndDrop but without an `onReorder` handler — sibling reordering becomes a no-op, so only drop-on (re-parent) gestures update the tree. Omit `onReorder` when your data model only supports nesting.'
773
+ }
774
+ }
775
+ };