@pingux/astro 2.0.3 → 2.0.4-alpha.1

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 (26) hide show
  1. package/lib/cjs/components/EnvironmentBreadcrumb/EnvironmentBreadcrumb.stories.js +5 -4
  2. package/lib/cjs/components/EnvironmentBreadcrumb/EnvironmentBreadcrumb.test.js +12 -2
  3. package/lib/cjs/components/ListBox/Option.js +7 -3
  4. package/lib/cjs/components/ListItem/ListItem.styles.js +21 -7
  5. package/lib/cjs/components/MultivaluesField/MultivaluesField.stories.js +21 -11
  6. package/lib/cjs/components/TooltipTrigger/TooltipTrigger.stories.js +3 -1
  7. package/lib/cjs/hooks/index.js +7 -0
  8. package/lib/cjs/hooks/useOverlappingMenuHoverState/index.js +14 -0
  9. package/lib/cjs/hooks/useOverlappingMenuHoverState/useOverlappingMenuHoverState.js +61 -0
  10. package/lib/cjs/hooks/useOverlappingMenuHoverState/useOverlappingMenuHoverState.test.js +226 -0
  11. package/lib/cjs/recipes/LinkedListView.stories.js +189 -139
  12. package/lib/cjs/recipes/ListAndPanel.stories.js +21 -46
  13. package/lib/components/EnvironmentBreadcrumb/EnvironmentBreadcrumb.stories.js +5 -4
  14. package/lib/components/EnvironmentBreadcrumb/EnvironmentBreadcrumb.test.js +12 -2
  15. package/lib/components/ListBox/Option.js +7 -3
  16. package/lib/components/ListItem/ListItem.styles.js +21 -7
  17. package/lib/components/MultivaluesField/MultivaluesField.stories.js +21 -11
  18. package/lib/components/TooltipTrigger/TooltipTrigger.stories.js +3 -1
  19. package/lib/hooks/index.js +1 -0
  20. package/lib/hooks/useOverlappingMenuHoverState/index.js +1 -0
  21. package/lib/hooks/useOverlappingMenuHoverState/useOverlappingMenuHoverState.js +53 -0
  22. package/lib/hooks/useOverlappingMenuHoverState/useOverlappingMenuHoverState.test.js +219 -0
  23. package/lib/recipes/LinkedListView.stories.js +191 -141
  24. package/lib/recipes/ListAndPanel.stories.js +21 -46
  25. package/package.json +1 -1
  26. package/NOTICE.html +0 -12399
@@ -0,0 +1,219 @@
1
+ import _Symbol from "@babel/runtime-corejs3/core-js-stable/symbol";
2
+ import _Object$defineProperty from "@babel/runtime-corejs3/core-js-stable/object/define-property";
3
+ import _Object$create from "@babel/runtime-corejs3/core-js-stable/object/create";
4
+ import _Object$getPrototypeOf from "@babel/runtime-corejs3/core-js-stable/object/get-prototype-of";
5
+ import _forEachInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/for-each";
6
+ import _Object$setPrototypeOf from "@babel/runtime-corejs3/core-js-stable/object/set-prototype-of";
7
+ import _Promise from "@babel/runtime-corejs3/core-js-stable/promise";
8
+ import _reverseInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/reverse";
9
+ import _sliceInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/slice";
10
+ import _typeof from "@babel/runtime-corejs3/helpers/esm/typeof";
11
+ import _asyncToGenerator from "@babel/runtime-corejs3/helpers/esm/asyncToGenerator";
12
+ function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, $Symbol = "function" == typeof _Symbol ? _Symbol : {}, iteratorSymbol = $Symbol.iterator || "@@iterator", asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator", toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; function define(obj, key, value) { return _Object$defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, ""); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = _Object$create(protoGenerator.prototype), context = new Context(tryLocsList || []); return generator._invoke = function (innerFn, self, context) { var state = "suspendedStart"; return function (method, arg) { if ("executing" === state) throw new Error("Generator is already running"); if ("completed" === state) { if ("throw" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if ("next" === context.method) context.sent = context._sent = context.arg;else if ("throw" === context.method) { if ("suspendedStart" === state) throw state = "completed", context.arg; context.dispatchException(context.arg); } else "return" === context.method && context.abrupt("return", context.arg); state = "executing"; var record = tryCatch(innerFn, self, context); if ("normal" === record.type) { if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } "throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg); } }; }(innerFn, self, context), generator; } function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = _Object$getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = _Object$create(IteratorPrototype); function defineIteratorMethods(prototype) { var _context8; _forEachInstanceProperty(_context8 = ["next", "throw", "return"]).call(_context8, function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if ("throw" !== record.type) { var result = record.arg, value = result.value; return value && "object" == _typeof(value) && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke("next", value, resolve, reject); }, function (err) { invoke("throw", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke("throw", error, resolve, reject); }); } reject(record.arg); } var previousPromise; this._invoke = function (method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); }; } function maybeInvokeDelegate(delegate, context) { var method = delegate.iterator[context.method]; if (undefined === method) { if (context.delegate = null, "throw" === context.method) { if (delegate.iterator["return"] && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method)) return ContinueSentinel; context.method = "throw", context.arg = new TypeError("The iterator does not provide a 'throw' method"); } return ContinueSentinel; } var record = tryCatch(method, delegate.iterator, context.arg); if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: "root" }], _forEachInstanceProperty(tryLocsList).call(tryLocsList, pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if ("function" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) { if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; } return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, define(Gp, "constructor", GeneratorFunctionPrototype), define(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function (genFun) { var ctor = "function" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return _Object$setPrototypeOf ? _Object$setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = _Object$create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = _Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, "toString", function () { return "[object Generator]"; }), exports.keys = function (object) { var keys = []; for (var key in object) { keys.push(key); } return _reverseInstanceProperty(keys).call(keys), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { var _context9; if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = "next", this.arg = undefined, _forEachInstanceProperty(_context9 = this.tryEntries).call(_context9, resetTryEntry), !skipTempReset) for (var name in this) { "t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+_sliceInstanceProperty(name).call(name, 1)) && (this[name] = undefined); } }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if ("throw" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if ("root" === entry.tryLoc) return handle("end"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"), hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error("try statement without catch or finally"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if ("throw" === record.type) throw record.arg; return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg, this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, "catch": function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if ("throw" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, "next" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; }
13
+ import React, { useRef } from 'react';
14
+ import { render, screen } from '@testing-library/react';
15
+ import userEvent from '@testing-library/user-event';
16
+ import { IconButton, ListItem, Menu, PopoverMenu } from '../../index';
17
+ import useOverlappingMenuHoverState from './useOverlappingMenuHoverState';
18
+ import { jsx as ___EmotionJSX } from "@emotion/react";
19
+ var IS_HOVERED = 'isHovered';
20
+ var TestComponent = function TestComponent() {
21
+ var listItemRef = useRef();
22
+ var _useOverlappingMenuHo = useOverlappingMenuHoverState({
23
+ listItemRef: listItemRef
24
+ }),
25
+ handleHoverEnd = _useOverlappingMenuHo.handleHoverEnd,
26
+ handleHoverStart = _useOverlappingMenuHo.handleHoverStart,
27
+ handleMenuHoverEnd = _useOverlappingMenuHo.handleMenuHoverEnd,
28
+ handleMouseMove = _useOverlappingMenuHo.handleMouseMove,
29
+ isHovered = _useOverlappingMenuHo.isHovered;
30
+ return ___EmotionJSX(React.Fragment, null, ___EmotionJSX(ListItem, {
31
+ isHovered: isHovered,
32
+ onHoverEnd: handleHoverEnd,
33
+ onHoverStart: handleHoverStart,
34
+ onMouseMove: handleMouseMove,
35
+ role: "listitem",
36
+ ref: listItemRef
37
+ }, ___EmotionJSX(PopoverMenu, null, ___EmotionJSX(IconButton, null), ___EmotionJSX(Menu, {
38
+ onAction: handleHoverEnd,
39
+ onHoverEnd: handleMenuHoverEnd,
40
+ onHoverStart: handleHoverStart
41
+ }))), isHovered && IS_HOVERED);
42
+ };
43
+ var getComponent = function getComponent() {
44
+ return render(___EmotionJSX(TestComponent, null));
45
+ };
46
+ describe('useOverlappingMenuHoverState', function () {
47
+ describe('when the menu is closed', function () {
48
+ describe('when the ListItem has not been hovered', function () {
49
+ it('it should not be hovered', function () {
50
+ getComponent();
51
+ expect(screen.queryByText(IS_HOVERED)).not.toBeInTheDocument();
52
+ });
53
+ });
54
+ describe('when the ListItem is hovered', function () {
55
+ it('it should be hovered', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
56
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
57
+ while (1) {
58
+ switch (_context.prev = _context.next) {
59
+ case 0:
60
+ getComponent();
61
+ _context.next = 3;
62
+ return userEvent.hover(screen.getByRole('listitem'));
63
+ case 3:
64
+ screen.getByText(IS_HOVERED);
65
+ case 4:
66
+ case "end":
67
+ return _context.stop();
68
+ }
69
+ }
70
+ }, _callee);
71
+ })));
72
+ });
73
+ });
74
+ describe('when the menu is opened', function () {
75
+ describe('when the ListItem is hovered', function () {
76
+ it('it should be hovered', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
77
+ return _regeneratorRuntime().wrap(function _callee2$(_context2) {
78
+ while (1) {
79
+ switch (_context2.prev = _context2.next) {
80
+ case 0:
81
+ getComponent();
82
+ _context2.next = 3;
83
+ return userEvent.click(screen.getByRole('button'));
84
+ case 3:
85
+ screen.getByText(IS_HOVERED);
86
+ case 4:
87
+ case "end":
88
+ return _context2.stop();
89
+ }
90
+ }
91
+ }, _callee2);
92
+ })));
93
+ });
94
+ describe('when the ListItem is unhovered', function () {
95
+ it('it should not be hovered', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {
96
+ return _regeneratorRuntime().wrap(function _callee3$(_context3) {
97
+ while (1) {
98
+ switch (_context3.prev = _context3.next) {
99
+ case 0:
100
+ getComponent();
101
+ _context3.next = 3;
102
+ return userEvent.click(screen.getByRole('button'));
103
+ case 3:
104
+ _context3.next = 5;
105
+ return userEvent.unhover(screen.getByRole('listitem'));
106
+ case 5:
107
+ expect(screen.queryByText(IS_HOVERED)).not.toBeInTheDocument();
108
+ case 6:
109
+ case "end":
110
+ return _context3.stop();
111
+ }
112
+ }
113
+ }, _callee3);
114
+ })));
115
+ });
116
+ describe('when the Menu is hovered', function () {
117
+ it('it should be hovered', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4() {
118
+ return _regeneratorRuntime().wrap(function _callee4$(_context4) {
119
+ while (1) {
120
+ switch (_context4.prev = _context4.next) {
121
+ case 0:
122
+ getComponent();
123
+ _context4.next = 3;
124
+ return userEvent.click(screen.getByRole('button'));
125
+ case 3:
126
+ _context4.next = 5;
127
+ return userEvent.hover(screen.getByRole('menu'));
128
+ case 5:
129
+ screen.getByText(IS_HOVERED);
130
+ case 6:
131
+ case "end":
132
+ return _context4.stop();
133
+ }
134
+ }
135
+ }, _callee4);
136
+ })));
137
+ });
138
+ describe('when hover moves from the menu to the ListItem', function () {
139
+ // FIXME: upgrade RTL to v14 (UIP-6248), then fix this test,
140
+ // then remove related coveragePathIgnorePatterns in jest.config.js
141
+ it('it should be hovered', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee5() {
142
+ return _regeneratorRuntime().wrap(function _callee5$(_context5) {
143
+ while (1) {
144
+ switch (_context5.prev = _context5.next) {
145
+ case 0:
146
+ getComponent();
147
+ _context5.next = 3;
148
+ return userEvent.click(screen.getByRole('button'));
149
+ case 3:
150
+ _context5.next = 5;
151
+ return userEvent.hover(screen.getByRole('menu'));
152
+ case 5:
153
+ _context5.next = 7;
154
+ return userEvent.hover(screen.getByRole('listitem'));
155
+ case 7:
156
+ screen.getByText(IS_HOVERED);
157
+ case 8:
158
+ case "end":
159
+ return _context5.stop();
160
+ }
161
+ }
162
+ }, _callee5);
163
+ })));
164
+ });
165
+ describe('when hover moves from the menu to unhovered', function () {
166
+ it('it should not be hovered', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee6() {
167
+ return _regeneratorRuntime().wrap(function _callee6$(_context6) {
168
+ while (1) {
169
+ switch (_context6.prev = _context6.next) {
170
+ case 0:
171
+ getComponent();
172
+ _context6.next = 3;
173
+ return userEvent.click(screen.getByRole('button'));
174
+ case 3:
175
+ _context6.next = 5;
176
+ return userEvent.hover(screen.getByRole('menu'));
177
+ case 5:
178
+ _context6.next = 7;
179
+ return userEvent.unhover(screen.getByRole('menu'));
180
+ case 7:
181
+ expect(screen.queryByText(IS_HOVERED)).not.toBeInTheDocument();
182
+ case 8:
183
+ case "end":
184
+ return _context6.stop();
185
+ }
186
+ }
187
+ }, _callee6);
188
+ })));
189
+ });
190
+ describe('when hover moves from the menu to ListItem to unhoverd', function () {
191
+ it('it should not be hovered', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee7() {
192
+ return _regeneratorRuntime().wrap(function _callee7$(_context7) {
193
+ while (1) {
194
+ switch (_context7.prev = _context7.next) {
195
+ case 0:
196
+ getComponent();
197
+ _context7.next = 3;
198
+ return userEvent.click(screen.getByRole('button'));
199
+ case 3:
200
+ _context7.next = 5;
201
+ return userEvent.hover(screen.getByRole('menu'));
202
+ case 5:
203
+ _context7.next = 7;
204
+ return userEvent.hover(screen.getByRole('listitem'));
205
+ case 7:
206
+ _context7.next = 9;
207
+ return userEvent.unhover(screen.getByRole('listitem'));
208
+ case 9:
209
+ expect(screen.queryByText(IS_HOVERED)).not.toBeInTheDocument();
210
+ case 10:
211
+ case "end":
212
+ return _context7.stop();
213
+ }
214
+ }
215
+ }, _callee7);
216
+ })));
217
+ });
218
+ });
219
+ });
@@ -5,9 +5,10 @@ import _forEachInstanceProperty from "@babel/runtime-corejs3/core-js-stable/inst
5
5
  import _findIndexInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/find-index";
6
6
  import _spliceInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/splice";
7
7
  import _concatInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/concat";
8
- import React, { useState } from 'react';
8
+ import React, { useRef, useState } from 'react';
9
9
  import DotsVerticalIcon from 'mdi-react/DotsVerticalIcon';
10
- import { Badge, Box, Icon, IconButton, Item, ListView, Menu, OverlayProvider, PopoverMenu, Separator, Text } from '../index';
10
+ import useOverlappingMenuHoverState from '../hooks/useOverlappingMenuHoverState';
11
+ import { Badge, Box, Icon, IconButton, Item, ListItem, ListView, Menu, PopoverMenu, Separator, Text } from '../index';
11
12
  import { jsx as ___EmotionJSX } from "@emotion/react";
12
13
  export default {
13
14
  title: 'Recipes/LinkedListView',
@@ -40,7 +41,6 @@ var testData = [{
40
41
  hasSeparator: false,
41
42
  hasInsetSeparator: true,
42
43
  badgeText: 'default',
43
- expirationText: 'Expiring On: 2022-12-08',
44
44
  childrenObjects: [{
45
45
  key: 'Staging Policy',
46
46
  name: 'Staging Policy',
@@ -101,6 +101,93 @@ var testSort = function testSort(array) {
101
101
  };
102
102
  var unsorted = flattenArray(testData);
103
103
  var sorted = testSort(unsorted);
104
+ var sx = {
105
+ badge: {
106
+ alignItems: 'center',
107
+ alignSelf: 'center',
108
+ ml: 'lg',
109
+ p: '3px 5px 2px 5px'
110
+ },
111
+ bottomBracket: {
112
+ container: {
113
+ ml: 12,
114
+ top: -2,
115
+ position: 'relative',
116
+ maxWidth: 15
117
+ },
118
+ separator: {
119
+ backgroundColor: 'decorative.7',
120
+ marginLeft: '2px !important',
121
+ maxHeight: '30px',
122
+ width: '2px !important'
123
+ },
124
+ separatorBox: {
125
+ alignItems: 'center',
126
+ flexDirection: 'row',
127
+ minWidth: 9
128
+ }
129
+ },
130
+ expirationBadge: {
131
+ alignItems: 'center',
132
+ alignSelf: 'center',
133
+ border: 'solid 1px',
134
+ borderColor: 'neutral.80',
135
+ p: '3px 5px 2px 5px'
136
+ },
137
+ listElement: {
138
+ container: {
139
+ height: 73,
140
+ pl: 24,
141
+ pr: 14
142
+ },
143
+ subText: {
144
+ color: 'text.secondary',
145
+ fontSize: 'sm',
146
+ fontWeight: 0
147
+ },
148
+ text: {
149
+ color: 'text.primary',
150
+ fontSize: 'md',
151
+ fontWeight: 1
152
+ },
153
+ textBox: {
154
+ alignItems: 'center',
155
+ justifyContent: 'center',
156
+ marginRight: 'auto'
157
+ }
158
+ },
159
+ listViewItem: {
160
+ minHeight: '75px',
161
+ padding: 1,
162
+ '&.has-inset-separator': {
163
+ '&:before': {
164
+ borderBottom: '1px solid',
165
+ borderBottomColor: 'line.light',
166
+ bottom: 0,
167
+ content: '""',
168
+ position: 'absolute',
169
+ right: 0,
170
+ width: 'calc(100% - 43px)'
171
+ }
172
+ },
173
+ '&.is-focused': {
174
+ '&:after': {
175
+ borderBottomColor: 'focus',
176
+ bottom: 0,
177
+ content: '""',
178
+ position: 'absolute',
179
+ right: 0,
180
+ width: 'calc(100% - 43px)'
181
+ }
182
+ }
183
+ },
184
+ topBracket: {
185
+ top: 50,
186
+ left: 12,
187
+ bottom: 0,
188
+ position: 'absolute'
189
+ }
190
+ };
104
191
  export var Default = function Default(_ref) {
105
192
  var _context2;
106
193
  var args = _extends({}, (_objectDestructuringEmpty(_ref), _ref));
@@ -112,12 +199,9 @@ export var Default = function Default(_ref) {
112
199
  var BottomBracket = function BottomBracket() {
113
200
  var color = '#CACED3';
114
201
  return ___EmotionJSX(Box, {
115
- sx: {
116
- width: '15px',
117
- position: 'relative'
118
- }
202
+ sx: sx.bottomBracket.container
119
203
  }, ___EmotionJSX(Box, {
120
- flexBasis: "50%"
204
+ flexBasis: "53%"
121
205
  }, ___EmotionJSX("svg", {
122
206
  xmlns: "http://www.w3.org/2000/svg",
123
207
  version: "1.1",
@@ -162,17 +246,40 @@ export var Default = function Default(_ref) {
162
246
  }))))));
163
247
  };
164
248
 
249
+ // the vector shield and key icon.
250
+ var ShieldIcon = function ShieldIcon(props) {
251
+ return ___EmotionJSX("svg", _extends({
252
+ width: "19",
253
+ height: "23",
254
+ viewBox: "0 0 19 23",
255
+ xmlns: "http://www.w3.org/2000/svg"
256
+ }, props), ___EmotionJSX("path", {
257
+ d: "M9.5 7.33342C9.77627 7.33342 10.0412 7.44316 10.2366 7.63851C10.4319 7.83386 10.5417 8.09881 10.5417 8.37508C10.5417 8.65135 10.4319 8.9163 10.2366 9.11165C10.0412 9.307 9.77627 9.41675 9.5 9.41675C9.22373 9.41675 8.95878 9.307 8.76343 9.11165C8.56808 8.9163 8.45833 8.65135 8.45833 8.37508C8.45833 8.09881 8.56808 7.83386 8.76343 7.63851C8.95878 7.44316 9.22373 7.33342 9.5 7.33342ZM18.875 10.4584C18.875 16.2397 14.875 21.6459 9.5 22.9584C4.125 21.6459 0.125 16.2397 0.125 10.4584V4.20842L9.5 0.041748L18.875 4.20842V10.4584ZM9.5 5.25008C8.6712 5.25008 7.87634 5.57932 7.29029 6.16537C6.70424 6.75142 6.375 7.54628 6.375 8.37508C6.375 9.73967 7.23958 10.8959 8.45833 11.323V17.7501H10.5417V15.6667H12.625V13.5834H10.5417V11.323C11.7604 10.8959 12.625 9.73967 12.625 8.37508C12.625 7.54628 12.2958 6.75142 11.7097 6.16537C11.1237 5.57932 10.3288 5.25008 9.5 5.25008Z"
258
+ }));
259
+ };
260
+ var Shield = function Shield(_ref2) {
261
+ var isParent = _ref2.isParent;
262
+ return ___EmotionJSX(Box, {
263
+ alignItems: "center",
264
+ justifyContent: "center",
265
+ minWidth: 24,
266
+ sx: {
267
+ position: 'relative'
268
+ }
269
+ }, ___EmotionJSX(Icon, {
270
+ icon: ShieldIcon,
271
+ color: isParent ? 'decorative.7' : 'accent.40',
272
+ size: 24,
273
+ isLinked: isParent
274
+ }), isParent && ___EmotionJSX(TopBracket, null));
275
+ };
276
+
165
277
  // the top portion of the bracket svg, this is basically just a straight vertical line.
166
278
  var TopBracket = function TopBracket() {
167
279
  var color = '#CACED3';
168
280
  return ___EmotionJSX(Box, {
169
281
  width: 15,
170
- sx: {
171
- position: 'absolute',
172
- bottom: 0,
173
- left: 12,
174
- top: 50
175
- }
282
+ sx: sx.topBracket
176
283
  }, ___EmotionJSX("svg", {
177
284
  xmlns: "http://www.w3.org/2000/svg",
178
285
  version: "1.1",
@@ -194,20 +301,11 @@ export var Default = function Default(_ref) {
194
301
  }))));
195
302
  };
196
303
 
197
- // the vector shield and key icon.
198
- var ShieldVector = function ShieldVector(props) {
199
- return ___EmotionJSX("svg", _extends({
200
- width: "19",
201
- height: "23",
202
- viewBox: "0 0 19 23",
203
- xmlns: "http://www.w3.org/2000/svg"
204
- }, props), ___EmotionJSX("path", {
205
- d: "M9.5 7.33342C9.77627 7.33342 10.0412 7.44316 10.2366 7.63851C10.4319 7.83386 10.5417 8.09881 10.5417 8.37508C10.5417 8.65135 10.4319 8.9163 10.2366 9.11165C10.0412 9.307 9.77627 9.41675 9.5 9.41675C9.22373 9.41675 8.95878 9.307 8.76343 9.11165C8.56808 8.9163 8.45833 8.65135 8.45833 8.37508C8.45833 8.09881 8.56808 7.83386 8.76343 7.63851C8.95878 7.44316 9.22373 7.33342 9.5 7.33342ZM18.875 10.4584C18.875 16.2397 14.875 21.6459 9.5 22.9584C4.125 21.6459 0.125 16.2397 0.125 10.4584V4.20842L9.5 0.041748L18.875 4.20842V10.4584ZM9.5 5.25008C8.6712 5.25008 7.87634 5.57932 7.29029 6.16537C6.70424 6.75142 6.375 7.54628 6.375 8.37508C6.375 9.73967 7.23958 10.8959 8.45833 11.323V17.7501H10.5417V15.6667H12.625V13.5834H10.5417V11.323C11.7604 10.8959 12.625 9.73967 12.625 8.37508C12.625 7.54628 12.2958 6.75142 11.7097 6.16537C11.1237 5.57932 10.3288 5.25008 9.5 5.25008Z"
206
- }));
207
- };
208
-
209
304
  // reusable piece of code that handles the iconbutton and popover on the right side of the rows
210
- var IconWithPopover = function IconWithPopover() {
305
+ var IconWithPopover = function IconWithPopover(_ref3) {
306
+ var handleHoverEnd = _ref3.handleHoverEnd,
307
+ handleHoverStart = _ref3.handleHoverStart,
308
+ handleMenuHoverEnd = _ref3.handleMenuHoverEnd;
211
309
  return ___EmotionJSX(PopoverMenu, {
212
310
  direction: "left"
213
311
  }, ___EmotionJSX(Box, {
@@ -222,6 +320,9 @@ export var Default = function Default(_ref) {
222
320
  m: "0.61px"
223
321
  }))), ___EmotionJSX(Menu, {
224
322
  direction: "left",
323
+ onAction: handleHoverEnd,
324
+ onHoverEnd: handleMenuHoverEnd,
325
+ onHoverStart: handleHoverStart,
225
326
  sx: {
226
327
  minWidth: '155px',
227
328
  minHeight: '144px'
@@ -245,17 +346,12 @@ export var Default = function Default(_ref) {
245
346
  return ___EmotionJSX(Badge, {
246
347
  label: "Default",
247
348
  bg: "active",
248
- sx: {
249
- marginLeft: '25px',
250
- alignSelf: 'center',
251
- alignItems: 'center',
252
- padding: '3px 5px 2px 5px'
253
- }
349
+ sx: sx.badge
254
350
  });
255
351
  };
256
- var ExprirationBadge = function ExprirationBadge(props) {
257
- var expirationText = props.expirationText,
258
- badgeText = props.badgeText;
352
+ var ExpirationBadge = function ExpirationBadge(_ref4) {
353
+ var expirationText = _ref4.expirationText,
354
+ badgeText = _ref4.badgeText;
259
355
  return ___EmotionJSX(Box, {
260
356
  sx: !badgeText && {
261
357
  paddingLeft: '72px'
@@ -265,128 +361,82 @@ export var Default = function Default(_ref) {
265
361
  alignSelf: "center"
266
362
  }, ___EmotionJSX(Badge, {
267
363
  bg: "white",
268
- sx: {
269
- border: 'solid 1px',
270
- borderColor: 'neutral.80',
271
- alignSelf: 'center',
272
- alignItems: 'center',
273
- padding: '3px 5px 2px 5px'
274
- },
364
+ sx: sx.expirationBadge,
275
365
  textColor: "text.primary",
276
366
  label: expirationText
277
367
  }));
278
368
  };
279
-
280
- // jsx of the production row
281
- var Production = function Production(props) {
282
- var badgeText = props.badgeText,
283
- hasStaging = props.hasStaging,
284
- policyId = props.policyId,
285
- name = props.name;
369
+ var ListElementContent = function ListElementContent(_ref5) {
370
+ var badgeText = _ref5.badgeText,
371
+ isChild = _ref5.isChild,
372
+ name = _ref5.name,
373
+ policyId = _ref5.policyId;
286
374
  return ___EmotionJSX(Box, {
287
375
  isRow: true,
288
- height: "75px"
289
- }, ___EmotionJSX(Box, {
290
- alignItems: "center",
291
- justifyContent: "center",
292
- sx: {
293
- position: 'relative'
294
- }
295
- }, ___EmotionJSX(Icon, {
296
- icon: ShieldVector,
297
- color: hasStaging ? 'decorative.7' : 'accent.40',
298
- size: 24,
299
- isLinked: hasStaging
300
- }), hasStaging && ___EmotionJSX(TopBracket, null)), ___EmotionJSX(Box, {
301
- isRow: true,
302
- mr: "auto",
303
- alignSelf: "center",
304
- justifyContent: "center",
305
- ml: "18px",
306
- alignItems: "center"
307
- }, ___EmotionJSX(Box, null, ___EmotionJSX(Text, {
308
- sx: {
309
- fontWeight: 1,
310
- color: 'text.primary',
311
- fontSize: 'md'
312
- }
376
+ ml: isChild ? 0 : 18,
377
+ sx: sx.listElement.textBox
378
+ }, isChild && ___EmotionJSX(Separator, {
379
+ orientation: "vertical",
380
+ sx: sx.bottomBracket.separator
381
+ }), ___EmotionJSX(Box, null, ___EmotionJSX(Text, {
382
+ sx: sx.listElement.text
313
383
  }, name), ___EmotionJSX(Text, {
314
- sx: {
315
- fontWeight: 0,
316
- color: 'text.secondary',
317
- fontSize: 'sm'
318
- }
319
- }, "Policy Id:", ' ', policyId)), badgeText && ___EmotionJSX(DefaultBadge, null)), ___EmotionJSX(IconWithPopover, null));
384
+ sx: sx.listElement.subText
385
+ }, "Policy Id:", ' ', policyId)), badgeText && ___EmotionJSX(DefaultBadge, null));
320
386
  };
321
-
322
- // jsx of the staging row.
323
- var Staging = function Staging(props) {
324
- var badgeText = props.badgeText,
325
- expirationText = props.expirationText,
326
- policyId = props.policyId,
327
- name = props.name;
328
- return ___EmotionJSX(Box, {
387
+ var ListElement = function ListElement(_ref6) {
388
+ var badgeText = _ref6.badgeText,
389
+ expirationText = _ref6.expirationText,
390
+ isChild = _ref6.isChild,
391
+ isParent = _ref6.isParent,
392
+ name = _ref6.name,
393
+ policyId = _ref6.policyId;
394
+ var listItemRef = useRef();
395
+ var _useOverlappingMenuHo = useOverlappingMenuHoverState({
396
+ listItemRef: listItemRef
397
+ }),
398
+ handleHoverEnd = _useOverlappingMenuHo.handleHoverEnd,
399
+ handleHoverStart = _useOverlappingMenuHo.handleHoverStart,
400
+ handleMenuHoverEnd = _useOverlappingMenuHo.handleMenuHoverEnd,
401
+ handleMouseMove = _useOverlappingMenuHo.handleMouseMove,
402
+ isHovered = _useOverlappingMenuHo.isHovered;
403
+ return ___EmotionJSX(ListItem, {
404
+ isHovered: isHovered,
329
405
  isRow: true,
330
- height: "75px",
331
- marginLeft: "12px"
332
- }, ___EmotionJSX(BottomBracket, null), ___EmotionJSX(Box, {
333
- isRow: true,
334
- alignItems: "center",
335
- justifyContent: "center"
336
- }, ___EmotionJSX(Box, {
337
- pl: "0px",
338
- height: "30px",
339
- flexDirection: "row",
340
- alignItems: "center"
341
- }, ___EmotionJSX(Separator, {
342
- orientation: "vertical",
343
- sx: {
344
- width: '2px !important',
345
- backgroundColor: 'decorative.7',
346
- marginLeft: '2px !important'
347
- }
348
- })), ___EmotionJSX(Box, null, ___EmotionJSX(Text, {
349
- sx: {
350
- fontWeight: 1,
351
- color: 'text.primary',
352
- fontSize: 'md'
353
- }
354
- }, name), ___EmotionJSX(Text, {
355
- sx: {
356
- fontWeight: 0,
357
- color: 'text.secondary',
358
- fontSize: 'sm'
359
- }
360
- }, "Policy Id:", ' ', policyId))), badgeText && ___EmotionJSX(DefaultBadge, null), expirationText && ___EmotionJSX(ExprirationBadge, {
406
+ onHoverEnd: handleHoverEnd,
407
+ onHoverStart: handleHoverStart,
408
+ onMouseMove: handleMouseMove,
409
+ ref: listItemRef,
410
+ variant: "listItem.hover",
411
+ sx: sx.listElement.container
412
+ }, !isChild ? ___EmotionJSX(Shield, {
413
+ isParent: isParent
414
+ }) : ___EmotionJSX(BottomBracket, null), ___EmotionJSX(ListElementContent, {
415
+ badgeText: badgeText,
416
+ expirationText: expirationText,
417
+ isChild: isChild,
418
+ name: name,
419
+ policyId: policyId
420
+ }), expirationText && ___EmotionJSX(ExpirationBadge, {
361
421
  expirationText: expirationText
362
- }), ___EmotionJSX(IconWithPopover, null));
422
+ }), ___EmotionJSX(IconWithPopover, {
423
+ handleHoverEnd: handleHoverEnd,
424
+ handleMenuHoverEnd: handleMenuHoverEnd,
425
+ handleHoverStart: handleHoverStart
426
+ }));
363
427
  };
364
- return ___EmotionJSX(OverlayProvider, null, ___EmotionJSX(ListView, _extends({}, args, {
428
+ return ___EmotionJSX(ListView, _extends({}, args, {
365
429
  items: theseItems
366
430
  }), function (item) {
367
431
  return ___EmotionJSX(Item, _extends({}, item, {
368
432
  textValue: item.name,
369
433
  "data-id": item.key,
370
434
  listItemProps: {
371
- minHeight: '75px',
372
- sx: {
373
- '&.has-inset-separator': {
374
- '&:before': {
375
- content: '""',
376
- position: 'absolute',
377
- width: 'calc(100% - 43px)',
378
- right: 0,
379
- bottom: 0,
380
- borderBottom: '1px solid',
381
- borderBottomColor: 'line.light'
382
- }
383
- }
384
- }
435
+ sx: sx.listViewItem
385
436
  }
386
- }), item.parentId ? ___EmotionJSX(Staging, _extends({}, item, {
387
- hasInsetSeparator: true
388
- })) : ___EmotionJSX(Production, _extends({
389
- hasStaging: item.childrenObjects
437
+ }), ___EmotionJSX(ListElement, _extends({
438
+ isParent: item.childrenObjects,
439
+ isChild: item.parentId
390
440
  }, item)));
391
- }));
441
+ });
392
442
  };