@hyperpackai/hyperui 0.2.0 → 0.3.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.
- package/README.md +13 -0
- package/dist/components/Accordion/index.d.ts +6 -0
- package/dist/components/Accordion/index.d.ts.map +1 -1
- package/dist/components/Accordion/index.js +65 -9
- package/dist/components/Autocomplete/index.d.ts +12 -2
- package/dist/components/Autocomplete/index.d.ts.map +1 -1
- package/dist/components/Autocomplete/index.js +148 -24
- package/dist/components/Backdrop/index.d.ts +2 -1
- package/dist/components/Backdrop/index.d.ts.map +1 -1
- package/dist/components/Backdrop/index.js +6 -3
- package/dist/components/Checkbox/index.d.ts +1 -0
- package/dist/components/Checkbox/index.d.ts.map +1 -1
- package/dist/components/Checkbox/index.js +6 -2
- package/dist/components/DashboardLayout/index.d.ts +13 -0
- package/dist/components/DashboardLayout/index.d.ts.map +1 -1
- package/dist/components/DashboardLayout/index.js +50 -7
- package/dist/components/DataTable/index.d.ts +43 -0
- package/dist/components/DataTable/index.d.ts.map +1 -1
- package/dist/components/DataTable/index.js +126 -21
- package/dist/components/Dialog/index.d.ts +9 -3
- package/dist/components/Dialog/index.d.ts.map +1 -1
- package/dist/components/Dialog/index.js +46 -30
- package/dist/components/Drawer/index.d.ts +11 -3
- package/dist/components/Drawer/index.d.ts.map +1 -1
- package/dist/components/Drawer/index.js +66 -11
- package/dist/components/DropdownMenu/index.d.ts +5 -3
- package/dist/components/DropdownMenu/index.d.ts.map +1 -1
- package/dist/components/DropdownMenu/index.js +56 -13
- package/dist/components/FocusTrap/index.d.ts.map +1 -1
- package/dist/components/FocusTrap/index.js +34 -32
- package/dist/components/Input/index.d.ts +2 -0
- package/dist/components/Input/index.d.ts.map +1 -1
- package/dist/components/Input/index.js +18 -4
- package/dist/components/Menu/index.d.ts +6 -2
- package/dist/components/Menu/index.d.ts.map +1 -1
- package/dist/components/Menu/index.js +50 -15
- package/dist/components/Modal/index.d.ts +3 -1
- package/dist/components/Modal/index.d.ts.map +1 -1
- package/dist/components/Modal/index.js +27 -9
- package/dist/components/NestedNavbar/index.d.ts +33 -0
- package/dist/components/NestedNavbar/index.d.ts.map +1 -0
- package/dist/components/NestedNavbar/index.js +435 -0
- package/dist/components/NestedSidebar/index.d.ts +48 -0
- package/dist/components/NestedSidebar/index.d.ts.map +1 -0
- package/dist/components/NestedSidebar/index.js +368 -0
- package/dist/components/Popover/index.d.ts +11 -3
- package/dist/components/Popover/index.d.ts.map +1 -1
- package/dist/components/Popover/index.js +45 -9
- package/dist/components/Radio/index.d.ts +26 -1
- package/dist/components/Radio/index.d.ts.map +1 -1
- package/dist/components/Radio/index.js +61 -2
- package/dist/components/Select/index.d.ts +5 -0
- package/dist/components/Select/index.d.ts.map +1 -1
- package/dist/components/Select/index.js +22 -5
- package/dist/components/Sheet/index.d.ts +9 -3
- package/dist/components/Sheet/index.d.ts.map +1 -1
- package/dist/components/Sheet/index.js +48 -23
- package/dist/components/Sidebar/index.d.ts +20 -1
- package/dist/components/Sidebar/index.d.ts.map +1 -1
- package/dist/components/Sidebar/index.js +285 -8
- package/dist/components/SpeedDial/index.d.ts +10 -0
- package/dist/components/SpeedDial/index.d.ts.map +1 -1
- package/dist/components/SpeedDial/index.js +61 -11
- package/dist/components/Switch/index.d.ts +2 -0
- package/dist/components/Switch/index.d.ts.map +1 -1
- package/dist/components/Switch/index.js +6 -2
- package/dist/components/Tabs/index.d.ts +3 -0
- package/dist/components/Tabs/index.d.ts.map +1 -1
- package/dist/components/Tabs/index.js +47 -8
- package/dist/components/TextField/index.d.ts +2 -0
- package/dist/components/TextField/index.d.ts.map +1 -1
- package/dist/components/TextField/index.js +12 -4
- package/dist/components/Textarea/index.d.ts +5 -0
- package/dist/components/Textarea/index.d.ts.map +1 -1
- package/dist/components/Textarea/index.js +21 -4
- package/dist/components/Transition/index.d.ts +14 -0
- package/dist/components/Transition/index.d.ts.map +1 -0
- package/dist/components/Transition/index.js +49 -0
- package/dist/components/TransitionGroup/index.d.ts +16 -0
- package/dist/components/TransitionGroup/index.d.ts.map +1 -0
- package/dist/components/TransitionGroup/index.js +95 -0
- package/dist/components/data.d.ts +81 -16
- package/dist/components/data.d.ts.map +1 -1
- package/dist/components/data.js +163 -31
- package/dist/components/enterprise.d.ts +85 -26
- package/dist/components/enterprise.d.ts.map +1 -1
- package/dist/components/enterprise.js +211 -36
- package/dist/components/index.d.ts +21 -13
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +7 -2
- package/dist/portal.d.ts.map +1 -1
- package/dist/portal.js +3 -0
- package/dist/theme/index.d.ts +5 -6
- package/dist/theme/index.d.ts.map +1 -1
- package/dist/theme/index.js +30 -0
- package/dist/tokens/index.d.ts.map +1 -1
- package/dist/tokens/index.js +11 -0
- package/package.json +6 -1
|
@@ -4,6 +4,18 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { injectCSS, cn, h } from "../theme/index.js";
|
|
6
6
|
import { Button } from "./Button/index.js";
|
|
7
|
+
function rootProps(props, className, extra) {
|
|
8
|
+
return {
|
|
9
|
+
...extra,
|
|
10
|
+
id: props.id,
|
|
11
|
+
class: cn(className, props.class),
|
|
12
|
+
style: mergeStyle(props.style, extra?.style),
|
|
13
|
+
"data-testid": props.testId
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
function mergeStyle(base, extra) {
|
|
17
|
+
return [base, extra].filter(Boolean).join(";") || undefined;
|
|
18
|
+
}
|
|
7
19
|
const ENTERPRISE_CSS = `
|
|
8
20
|
.hu-enterprise {
|
|
9
21
|
display: flex; flex-direction: column; gap: var(--hu-space-3);
|
|
@@ -227,7 +239,7 @@ const ENTERPRISE_CSS = `
|
|
|
227
239
|
export function ApprovalFlow(props) {
|
|
228
240
|
injectCSS("hu-enterprise", ENTERPRISE_CSS);
|
|
229
241
|
const pending = props.steps.filter((step) => (step.status ?? "pending") === "pending").length;
|
|
230
|
-
return h("section",
|
|
242
|
+
return h("section", rootProps(props, "hu-enterprise hu-approval-flow", { "aria-label": props.title ?? "Approval flow" }), enterpriseHeader(props.title ?? "Approval flow", props.description ?? `${pending} pending`), h("ol", { class: "hu-approval-flow__steps" }, ...props.steps.map((step, index) => {
|
|
231
243
|
const status = step.status ?? "pending";
|
|
232
244
|
return h("li", {
|
|
233
245
|
key: step.id,
|
|
@@ -238,7 +250,7 @@ export function ApprovalFlow(props) {
|
|
|
238
250
|
}
|
|
239
251
|
export function AuditTrail(props) {
|
|
240
252
|
injectCSS("hu-enterprise", ENTERPRISE_CSS);
|
|
241
|
-
return h("section",
|
|
253
|
+
return h("section", rootProps(props, "hu-enterprise hu-audit-trail", { "aria-label": props.title ?? "Audit trail" }), enterpriseHeader(props.title ?? "Audit trail", props.description ?? `${props.events.length} events`), h("div", { class: "hu-audit-trail__list", role: "list" }, ...props.events.map((event) => h("article", {
|
|
242
254
|
key: event.id,
|
|
243
255
|
class: cn("hu-audit-event", event.severity && `hu-audit-event--${event.severity}`),
|
|
244
256
|
role: "listitem",
|
|
@@ -249,84 +261,239 @@ export function AuditTrail(props) {
|
|
|
249
261
|
export function PermissionMatrix(props) {
|
|
250
262
|
injectCSS("hu-enterprise", ENTERPRISE_CSS);
|
|
251
263
|
const value = props.value ?? {};
|
|
252
|
-
|
|
264
|
+
const resourceHeaderId = "hu-permission-resource";
|
|
265
|
+
return h("section", rootProps(props, "hu-enterprise", {
|
|
266
|
+
"aria-label": props["aria-label"] ?? props.title ?? "Permission matrix",
|
|
267
|
+
"aria-labelledby": props["aria-labelledby"]
|
|
268
|
+
}), enterpriseHeader(props.title ?? "Permission matrix", props.description ?? `${props.resources.length} resources`), h("div", { class: "hu-permission-matrix", "aria-label": props.matrixLabel ?? "Permissions", "aria-rowcount": props.resources.length }, h("table", { role: "grid", "aria-rowcount": props.resources.length }, h("thead", {}, h("tr", {}, h("th", { id: resourceHeaderId, role: "columnheader", scope: "col" }, props.resourceHeaderLabel ?? "Resource"), ...props.actions.map((action) => h("th", {
|
|
269
|
+
key: action.key,
|
|
270
|
+
id: getPermissionActionId(action),
|
|
271
|
+
role: "columnheader",
|
|
272
|
+
scope: "col",
|
|
273
|
+
"aria-label": action.headerLabel
|
|
274
|
+
}, action.label)))), h("tbody", {}, ...props.resources.map((resource, rowIndex) => h("tr", {
|
|
275
|
+
key: resource.key,
|
|
276
|
+
role: "row",
|
|
277
|
+
"aria-rowindex": rowIndex + 1,
|
|
278
|
+
"aria-disabled": resource.disabled ? "true" : undefined,
|
|
279
|
+
"aria-label": resource.rowLabel
|
|
280
|
+
}, h("th", { id: getPermissionResourceId(resource), role: "rowheader", scope: "row", headers: resourceHeaderId }, resource.label), ...props.actions.map((action) => {
|
|
253
281
|
const checked = value[resource.key]?.includes(action.key) ?? false;
|
|
254
|
-
|
|
282
|
+
const disabled = resource.disabled || action.disabled || (props.isPermissionDisabled?.(resource, action) ?? false);
|
|
283
|
+
return h("td", {
|
|
284
|
+
key: action.key,
|
|
285
|
+
role: "gridcell",
|
|
286
|
+
headers: `${getPermissionResourceId(resource)} ${getPermissionActionId(action)}`
|
|
287
|
+
}, h("input", {
|
|
255
288
|
type: "checkbox",
|
|
256
289
|
checked,
|
|
257
|
-
|
|
258
|
-
|
|
290
|
+
disabled,
|
|
291
|
+
"aria-label": props.permissionLabel?.(resource, action) ?? `${resource.label} ${action.label}`,
|
|
292
|
+
onChange: (e) => {
|
|
293
|
+
if (disabled)
|
|
294
|
+
return;
|
|
295
|
+
props.onChange?.(resource.key, action.key, e.target.checked);
|
|
296
|
+
}
|
|
259
297
|
}));
|
|
260
298
|
})))))));
|
|
261
299
|
}
|
|
262
300
|
export function RoleManager(props) {
|
|
263
301
|
injectCSS("hu-enterprise", ENTERPRISE_CSS);
|
|
264
302
|
const selectedRole = props.roles.find((role) => role.id === props.selectedRole) ?? props.roles[0];
|
|
265
|
-
return h("section",
|
|
303
|
+
return h("section", rootProps(props, "hu-enterprise hu-role-manager", {
|
|
304
|
+
"aria-label": props["aria-label"] ?? props.title ?? "Role manager",
|
|
305
|
+
"aria-labelledby": props["aria-labelledby"]
|
|
306
|
+
}), h("div", { class: "hu-enterprise__header" }, h("div", {}, h("div", { class: "hu-enterprise__title" }, props.title ?? "Role manager"), h("div", { class: "hu-enterprise__meta" }, props.description ?? `${props.roles.length} roles`)), props.onCreateRole && Button({ type: "button", size: "sm", children: props.createRoleLabel ?? "New role", onClick: props.onCreateRole })), h("div", { class: "hu-role-manager__grid" }, h("div", { class: "hu-role-manager__roles", role: "listbox", "aria-label": props.rolesLabel ?? "Roles" }, ...props.roles.map((role) => h("button", {
|
|
266
307
|
key: role.id,
|
|
267
308
|
type: "button",
|
|
268
309
|
class: "hu-role-manager__role",
|
|
269
310
|
role: "option",
|
|
311
|
+
disabled: role.disabled,
|
|
312
|
+
"aria-disabled": role.disabled ? "true" : undefined,
|
|
313
|
+
"aria-label": props.roleLabel?.(role) ?? role.label,
|
|
270
314
|
"aria-selected": selectedRole?.id === role.id ? "true" : "false",
|
|
271
|
-
onClick: () =>
|
|
272
|
-
|
|
315
|
+
onClick: () => {
|
|
316
|
+
if (role.disabled)
|
|
317
|
+
return;
|
|
318
|
+
props.onRoleSelect?.(role.id);
|
|
319
|
+
}
|
|
320
|
+
}, h("span", {}, role.name), h("span", { class: "hu-enterprise__meta" }, `${role.users ?? 0} users`)))), h("div", { class: "hu-role-manager__details", "aria-label": props.detailsLabel ?? "Role details" }, selectedRole
|
|
273
321
|
? [
|
|
274
322
|
h("div", { class: "hu-enterprise__title" }, selectedRole.name),
|
|
275
323
|
selectedRole.description && h("div", { class: "hu-enterprise__meta" }, selectedRole.description),
|
|
276
|
-
h("div", { class: "hu-role-manager__permissions", "aria-label": "Role permissions" },
|
|
324
|
+
h("div", { class: "hu-role-manager__permissions", "aria-label": props.permissionsLabel ?? "Role permissions" }, (selectedRole.permissions?.length ?? 0) > 0
|
|
325
|
+
? selectedRole.permissions.map((permission) => h("span", { key: permission, class: "hu-role-manager__permission" }, permission))
|
|
326
|
+
: h("span", { class: "hu-enterprise__meta" }, props.noPermissionsMessage ?? "No permissions assigned."))
|
|
277
327
|
]
|
|
278
|
-
: h("div", { class: "hu-enterprise__meta" }, "No role selected."))));
|
|
328
|
+
: h("div", { class: "hu-enterprise__meta" }, props.emptyMessage ?? "No role selected."))));
|
|
279
329
|
}
|
|
280
330
|
export function FeatureFlags(props) {
|
|
281
331
|
injectCSS("hu-enterprise", ENTERPRISE_CSS);
|
|
282
332
|
const enabledCount = props.flags.filter((flag) => flag.enabled).length;
|
|
283
|
-
return h("section",
|
|
333
|
+
return h("section", rootProps(props, "hu-enterprise hu-feature-flags", {
|
|
334
|
+
"aria-label": props["aria-label"] ?? props.title ?? "Feature flags",
|
|
335
|
+
"aria-labelledby": props["aria-labelledby"]
|
|
336
|
+
}), enterpriseHeader(props.title ?? "Feature flags", props.description ?? `${enabledCount} enabled · ${props.flags.length} total`), h("div", { class: "hu-feature-flags__list", role: "list", "aria-label": props.listLabel ?? "Feature flags" }, ...props.flags.map((flag) => {
|
|
284
337
|
const enabled = flag.enabled ?? false;
|
|
285
|
-
|
|
338
|
+
const disabled = flag.disabled || (props.isFlagDisabled?.(flag) ?? false);
|
|
339
|
+
return h("article", {
|
|
340
|
+
key: flag.key,
|
|
341
|
+
class: "hu-feature-flag",
|
|
342
|
+
role: "listitem",
|
|
343
|
+
"aria-disabled": disabled ? "true" : undefined,
|
|
344
|
+
"aria-label": props.flagLabel?.(flag) ?? flag.label
|
|
345
|
+
}, h("div", {}, h("div", { class: "hu-feature-flag__name" }, flag.name), h("div", { class: "hu-feature-flag__details" }, [flag.description, flag.environment, flag.rollout !== undefined ? `${flag.rollout}% rollout` : undefined].filter(Boolean).join(" · "))), h("div", { class: "hu-feature-flag__actions" }, h("span", { class: cn("hu-feature-flag__badge", enabled ? "hu-feature-flag__badge--enabled" : "hu-feature-flag__badge--disabled") }, enabled ? props.enabledLabel ?? "Enabled" : props.disabledLabel ?? "Disabled"), h("input", {
|
|
286
346
|
type: "checkbox",
|
|
287
347
|
role: "switch",
|
|
288
348
|
checked: enabled,
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
349
|
+
disabled,
|
|
350
|
+
"aria-label": props.flagLabel?.(flag) ?? `Toggle ${flag.name}`,
|
|
351
|
+
onChange: (e) => {
|
|
352
|
+
if (disabled)
|
|
353
|
+
return;
|
|
354
|
+
props.onToggle?.(flag.key, e.target.checked);
|
|
355
|
+
}
|
|
356
|
+
}), props.onEdit && Button({
|
|
357
|
+
type: "button",
|
|
358
|
+
size: "sm",
|
|
359
|
+
variant: "secondary",
|
|
360
|
+
disabled,
|
|
361
|
+
children: props.editLabel ?? "Edit",
|
|
362
|
+
onClick: () => {
|
|
363
|
+
if (disabled)
|
|
364
|
+
return;
|
|
365
|
+
props.onEdit?.(flag.key);
|
|
366
|
+
}
|
|
367
|
+
})));
|
|
292
368
|
})));
|
|
293
369
|
}
|
|
294
370
|
export function TenantSelector(props) {
|
|
295
371
|
injectCSS("hu-enterprise", ENTERPRISE_CSS);
|
|
296
372
|
const selected = props.tenants.find((tenant) => tenant.id === props.value) ?? props.tenants[0];
|
|
297
|
-
|
|
373
|
+
const selectedDisabled = selected ? selected.disabled || (props.isTenantDisabled?.(selected) ?? false) : false;
|
|
374
|
+
return h("section", rootProps(props, "hu-enterprise hu-tenant-selector", {
|
|
375
|
+
"aria-label": props["aria-label"] ?? props.title ?? "Tenant selector",
|
|
376
|
+
"aria-labelledby": props["aria-labelledby"]
|
|
377
|
+
}), enterpriseHeader(props.title ?? "Tenant selector", props.description ?? `${props.tenants.length} tenants`), props.tenants.length > 0 ? h("div", { class: "hu-tenant-selector__control" }, h("label", {}, h("span", { class: "hu-enterprise__meta" }, props.tenantLabel ?? "Tenant"), h("select", {
|
|
298
378
|
class: "hu-tenant-selector__select",
|
|
299
379
|
value: selected?.id,
|
|
300
|
-
|
|
301
|
-
|
|
380
|
+
"aria-label": props.selectLabel ?? props.tenantLabel ?? "Tenant",
|
|
381
|
+
onChange: (e) => {
|
|
382
|
+
const nextId = e.target.value;
|
|
383
|
+
const nextTenant = props.tenants.find((tenant) => tenant.id === nextId);
|
|
384
|
+
if (!nextTenant || nextTenant.disabled || (props.isTenantDisabled?.(nextTenant) ?? false))
|
|
385
|
+
return;
|
|
386
|
+
props.onChange?.(nextId);
|
|
387
|
+
}
|
|
388
|
+
}, ...props.tenants.map((tenant) => {
|
|
389
|
+
const disabled = tenant.disabled || (props.isTenantDisabled?.(tenant) ?? false);
|
|
390
|
+
return h("option", { key: tenant.id, value: tenant.id, disabled }, props.tenantOptionLabel?.(tenant) ?? tenant.label ?? tenant.name);
|
|
391
|
+
}))), selected && props.onManage && Button({
|
|
392
|
+
type: "button",
|
|
393
|
+
size: "sm",
|
|
394
|
+
disabled: selectedDisabled,
|
|
395
|
+
children: props.manageLabel ?? "Manage",
|
|
396
|
+
onClick: () => {
|
|
397
|
+
if (selectedDisabled)
|
|
398
|
+
return;
|
|
399
|
+
props.onManage?.(selected.id);
|
|
400
|
+
}
|
|
401
|
+
})) : h("div", { class: "hu-enterprise__meta" }, props.emptyMessage ?? "No tenants available."), selected && h("div", {
|
|
402
|
+
class: "hu-tenant-selector__summary",
|
|
403
|
+
"aria-live": "polite",
|
|
404
|
+
"aria-label": props.summaryLabel ?? "Selected tenant"
|
|
405
|
+
}, h("span", {}, selected.plan ?? "No plan"), h("span", {}, selected.region ?? "No region"), h("span", {}, selected.status ?? "active")));
|
|
302
406
|
}
|
|
303
407
|
export function NotificationCenter(props) {
|
|
304
408
|
injectCSS("hu-enterprise", ENTERPRISE_CSS);
|
|
305
409
|
const unread = props.notifications.filter((notification) => !notification.read).length;
|
|
306
|
-
return h("section",
|
|
410
|
+
return h("section", rootProps(props, "hu-enterprise hu-notification-center", {
|
|
411
|
+
"aria-label": props["aria-label"] ?? props.title ?? "Notification center",
|
|
412
|
+
"aria-labelledby": props["aria-labelledby"]
|
|
413
|
+
}), enterpriseHeader(props.title ?? "Notification center", props.description ?? `${unread} unread`), h("div", {
|
|
414
|
+
class: "hu-notification-center__list",
|
|
415
|
+
role: "list",
|
|
416
|
+
"aria-live": "polite",
|
|
417
|
+
"aria-label": props.listLabel ?? "Notifications"
|
|
418
|
+
}, ...(props.notifications.length > 0 ? props.notifications.map((notification) => {
|
|
307
419
|
const kind = notification.kind ?? "info";
|
|
308
|
-
|
|
309
|
-
|
|
420
|
+
const disabled = notification.disabled || (props.isNotificationDisabled?.(notification) ?? false);
|
|
421
|
+
return h("article", {
|
|
422
|
+
key: notification.id,
|
|
423
|
+
class: "hu-notification",
|
|
424
|
+
role: "listitem",
|
|
425
|
+
"aria-disabled": disabled ? "true" : undefined,
|
|
426
|
+
"aria-label": props.notificationLabel?.(notification) ?? notification.label
|
|
427
|
+
}, h("div", {}, h("div", { class: "hu-notification__title" }, notification.title), notification.message && h("div", { class: "hu-notification__meta" }, notification.message), notification.timestamp && h("div", { class: "hu-notification__meta" }, notification.timestamp)), h("div", { class: "hu-notification__actions" }, h("span", { class: cn("hu-notification__badge", `hu-notification__badge--${kind}`) }, notification.read ? props.readLabel ?? "Read" : props.unreadLabel ?? "Unread"), !notification.read && props.onMarkRead && Button({
|
|
428
|
+
type: "button",
|
|
429
|
+
size: "sm",
|
|
430
|
+
variant: "secondary",
|
|
431
|
+
disabled,
|
|
432
|
+
children: props.markReadLabel ?? "Mark read",
|
|
433
|
+
onClick: () => {
|
|
434
|
+
if (disabled)
|
|
435
|
+
return;
|
|
436
|
+
props.onMarkRead?.(notification.id);
|
|
437
|
+
}
|
|
438
|
+
}), props.onDismiss && Button({
|
|
439
|
+
type: "button",
|
|
440
|
+
size: "sm",
|
|
441
|
+
variant: "ghost",
|
|
442
|
+
disabled,
|
|
443
|
+
children: props.dismissLabel ?? "Dismiss",
|
|
444
|
+
onClick: () => {
|
|
445
|
+
if (disabled)
|
|
446
|
+
return;
|
|
447
|
+
props.onDismiss?.(notification.id);
|
|
448
|
+
}
|
|
449
|
+
})));
|
|
450
|
+
}) : [h("div", { class: "hu-enterprise__meta" }, props.emptyMessage ?? "No notifications.")])));
|
|
310
451
|
}
|
|
311
452
|
export function ActivityFeed(props) {
|
|
312
453
|
injectCSS("hu-enterprise", ENTERPRISE_CSS);
|
|
313
|
-
return h("section",
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
454
|
+
return h("section", rootProps(props, "hu-enterprise hu-activity-feed", {
|
|
455
|
+
"aria-label": props["aria-label"] ?? props.title ?? "Activity feed",
|
|
456
|
+
"aria-labelledby": props["aria-labelledby"]
|
|
457
|
+
}), enterpriseHeader(props.title ?? "Activity feed", props.description ?? `${props.items.length} activities`), h("div", { class: "hu-activity-feed__list", role: "feed", "aria-label": props.feedLabel ?? "Activity feed" }, ...(props.items.length > 0 ? props.items.map((item) => {
|
|
458
|
+
const disabled = item.disabled || (props.isItemDisabled?.(item) ?? false);
|
|
459
|
+
const interactive = Boolean(props.onItemClick) && !disabled;
|
|
460
|
+
return h("article", {
|
|
461
|
+
key: item.id,
|
|
462
|
+
class: "hu-activity-item",
|
|
463
|
+
role: "article",
|
|
464
|
+
tabindex: interactive ? 0 : undefined,
|
|
465
|
+
"aria-disabled": disabled ? "true" : undefined,
|
|
466
|
+
"aria-label": props.itemLabel?.(item) ?? item.label,
|
|
467
|
+
onClick: interactive ? () => props.onItemClick?.(item) : undefined,
|
|
468
|
+
onKeyDown: interactive ? (event) => {
|
|
469
|
+
if (event.key !== "Enter" && event.key !== " ")
|
|
470
|
+
return;
|
|
471
|
+
event.preventDefault();
|
|
472
|
+
props.onItemClick?.(item);
|
|
473
|
+
} : undefined
|
|
474
|
+
}, h("span", { class: "hu-activity-item__avatar", "aria-hidden": "true" }, item.avatar ?? initials(item.actor)), h("div", {}, h("div", { class: "hu-activity-item__title" }, `${item.actor} ${item.action}`), item.target && h("div", { class: "hu-activity-item__meta" }, item.target), item.timestamp && h("time", { class: "hu-activity-item__meta" }, item.timestamp)), props.onItemClick && Button({
|
|
475
|
+
type: "button",
|
|
476
|
+
size: "sm",
|
|
477
|
+
variant: "ghost",
|
|
478
|
+
disabled,
|
|
479
|
+
children: props.openLabel ?? "Open",
|
|
480
|
+
onClick: () => {
|
|
481
|
+
if (disabled)
|
|
482
|
+
return;
|
|
483
|
+
props.onItemClick?.(item);
|
|
484
|
+
}
|
|
485
|
+
}));
|
|
486
|
+
}) : [h("div", { class: "hu-enterprise__meta" }, props.emptyMessage ?? "No activity yet.")])));
|
|
320
487
|
}
|
|
321
488
|
export function OrgChart(props) {
|
|
322
489
|
injectCSS("hu-enterprise", ENTERPRISE_CSS);
|
|
323
490
|
const total = countOrgNodes(props.nodes);
|
|
324
|
-
return h("section",
|
|
491
|
+
return h("section", rootProps(props, "hu-enterprise hu-org-chart", { "aria-label": props.title ?? "Org chart" }), enterpriseHeader(props.title ?? "Org chart", props.description ?? `${total} people`), h("div", { class: "hu-org-chart__tree", role: "tree" }, ...props.nodes.map((node) => renderOrgNode(node, props.onNodeSelect, 1))));
|
|
325
492
|
}
|
|
326
493
|
export function GanttChart(props) {
|
|
327
494
|
injectCSS("hu-enterprise", ENTERPRISE_CSS);
|
|
328
495
|
const range = getGanttRange(props.tasks);
|
|
329
|
-
return h("section",
|
|
496
|
+
return h("section", rootProps(props, "hu-enterprise", { "aria-label": props.title ?? "Gantt chart" }), enterpriseHeader(props.title ?? "Gantt chart", props.description ?? `${props.tasks.length} tasks`), h("div", { class: "hu-gantt", role: "region", "aria-label": "Project timeline" }, h("table", {}, h("thead", {}, h("tr", {}, h("th", { scope: "col" }, "Task"), h("th", { scope: "col" }, "Owner"), h("th", { scope: "col" }, "Timeline"), h("th", { scope: "col" }, "Progress"))), h("tbody", {}, ...props.tasks.map((task) => {
|
|
330
497
|
const startOffset = range.days === 0 ? 0 : daysBetween(range.start, parseDate(task.start)) / range.days * 100;
|
|
331
498
|
const duration = range.days === 0 ? 100 : Math.max(1, daysBetween(parseDate(task.start), parseDate(task.end)) / range.days * 100);
|
|
332
499
|
return h("tr", {
|
|
@@ -340,11 +507,10 @@ export function GanttChart(props) {
|
|
|
340
507
|
}
|
|
341
508
|
export function KanbanBoard(props) {
|
|
342
509
|
injectCSS("hu-enterprise", ENTERPRISE_CSS);
|
|
343
|
-
return h("section", {
|
|
344
|
-
class: cn("hu-enterprise hu-kanban-board", props.class),
|
|
510
|
+
return h("section", rootProps(props, "hu-enterprise hu-kanban-board", {
|
|
345
511
|
style: `--hu-kanban-columns:${Math.max(1, props.columns.length)}`,
|
|
346
512
|
"aria-label": props.title ?? "Kanban board"
|
|
347
|
-
}, enterpriseHeader(props.title ?? "Kanban board", props.description ?? `${props.cards.length} cards`), h("div", { class: "hu-kanban-board__columns" }, ...props.columns.map((column) => {
|
|
513
|
+
}), enterpriseHeader(props.title ?? "Kanban board", props.description ?? `${props.cards.length} cards`), h("div", { class: "hu-kanban-board__columns" }, ...props.columns.map((column) => {
|
|
348
514
|
const cards = props.cards.filter((card) => card.column === column.id);
|
|
349
515
|
return h("section", { key: column.id, class: "hu-kanban-column", "aria-label": column.title }, h("div", { class: "hu-kanban-column__header" }, h("span", {}, column.title), h("span", { class: "hu-enterprise__meta" }, `${cards.length}${column.limit ? `/${column.limit}` : ""}`)), ...cards.map((card) => h("article", { key: card.id, class: "hu-kanban-card" }, h("div", { class: "hu-kanban-card__title" }, card.title), card.description && h("div", { class: "hu-kanban-card__meta" }, card.description), h("div", { class: "hu-kanban-card__meta" }, [card.assignee, card.priority].filter(Boolean).join(" · ")), h("div", { class: "hu-kanban-card__actions" }, props.onCardSelect && Button({ type: "button", size: "sm", variant: "ghost", children: "Open", onClick: () => props.onCardSelect?.(card) }), props.onCardMove && props.columns.filter((target) => target.id !== column.id).map((target) => Button({ type: "button", size: "sm", variant: "secondary", children: `Move to ${target.title}`, onClick: () => props.onCardMove?.(card.id, target.id) }))))));
|
|
350
516
|
})));
|
|
@@ -352,7 +518,7 @@ export function KanbanBoard(props) {
|
|
|
352
518
|
export function WorkflowDesigner(props) {
|
|
353
519
|
injectCSS("hu-enterprise", ENTERPRISE_CSS);
|
|
354
520
|
const nodeMap = new Map(props.nodes.map((node, index) => [node.id, resolveWorkflowNodePosition(node, index)]));
|
|
355
|
-
return h("section",
|
|
521
|
+
return h("section", rootProps(props, "hu-enterprise hu-workflow-designer", { "aria-label": props.title ?? "Workflow designer" }), h("div", { class: "hu-enterprise__header" }, h("div", {}, h("div", { class: "hu-enterprise__title" }, props.title ?? "Workflow designer"), h("div", { class: "hu-enterprise__meta" }, props.description ?? `${props.nodes.length} nodes · ${props.edges?.length ?? 0} edges`)), props.onAddNode && Button({ type: "button", size: "sm", children: "Add node", onClick: props.onAddNode })), h("div", { class: "hu-workflow-designer__canvas", role: "application", "aria-label": "Workflow canvas" }, h("svg", { class: "hu-workflow-designer__edges", viewBox: "0 0 760 320", "aria-hidden": "true" }, ...(props.edges ?? []).map((edge) => {
|
|
356
522
|
const from = nodeMap.get(edge.from);
|
|
357
523
|
const to = nodeMap.get(edge.to);
|
|
358
524
|
if (!from || !to)
|
|
@@ -382,7 +548,7 @@ export function DocumentViewer(props) {
|
|
|
382
548
|
injectCSS("hu-enterprise", ENTERPRISE_CSS);
|
|
383
549
|
const page = props.page ?? 1;
|
|
384
550
|
const pages = Math.max(1, props.document.pages ?? 1);
|
|
385
|
-
return h("section",
|
|
551
|
+
return h("section", rootProps(props, "hu-enterprise hu-document-viewer", { "aria-label": props.title ?? "Document viewer" }), h("div", { class: "hu-document-viewer__toolbar" }, h("div", {}, h("div", { class: "hu-document-viewer__name" }, props.title ?? props.document.name), h("div", { class: "hu-document-viewer__meta" }, props.description ?? [props.document.kind ?? "unknown", props.document.size, `${page} / ${pages}`].filter(Boolean).join(" · "))), h("div", { class: "hu-document-viewer__actions" }, Button({ type: "button", size: "sm", variant: "secondary", disabled: page <= 1, children: "Previous", onClick: () => props.onPageChange?.(page - 1) }), Button({ type: "button", size: "sm", variant: "secondary", disabled: page >= pages, children: "Next", onClick: () => props.onPageChange?.(page + 1) }), props.onDownload && Button({ type: "button", size: "sm", children: "Download", onClick: () => props.onDownload?.(props.document) }))), h("div", { class: "hu-document-viewer__frame", role: "document", "aria-label": props.document.name }, props.document.kind === "image" && props.document.url
|
|
386
552
|
? h("img", { src: props.document.url, alt: props.document.name, loading: "lazy" })
|
|
387
553
|
: h("div", { class: "hu-document-viewer__preview" }, props.document.content ?? `${props.document.name}\n${props.document.kind ?? "unknown"} preview`)));
|
|
388
554
|
}
|
|
@@ -394,6 +560,15 @@ function formatMetadata(metadata) {
|
|
|
394
560
|
return "";
|
|
395
561
|
return Object.entries(metadata).map(([key, value]) => `${key}: ${String(value)}`).join(" · ");
|
|
396
562
|
}
|
|
563
|
+
function getPermissionActionId(action) {
|
|
564
|
+
return action.id ?? `hu-permission-action-${toDomId(action.key)}`;
|
|
565
|
+
}
|
|
566
|
+
function getPermissionResourceId(resource) {
|
|
567
|
+
return resource.id ?? `hu-permission-resource-${toDomId(resource.key)}`;
|
|
568
|
+
}
|
|
569
|
+
function toDomId(value) {
|
|
570
|
+
return value.toLowerCase().replace(/[^a-z0-9_-]+/g, "-").replace(/^-+|-+$/g, "") || "value";
|
|
571
|
+
}
|
|
397
572
|
function initials(name) {
|
|
398
573
|
return name.split(" ").slice(0, 2).map((part) => part[0]?.toUpperCase() ?? "").join("") || "?";
|
|
399
574
|
}
|
|
@@ -8,8 +8,8 @@ export { Textarea } from "./Textarea/index.js";
|
|
|
8
8
|
export type { TextareaProps } from "./Textarea/index.js";
|
|
9
9
|
export { Checkbox } from "./Checkbox/index.js";
|
|
10
10
|
export type { CheckboxProps } from "./Checkbox/index.js";
|
|
11
|
-
export { Radio } from "./Radio/index.js";
|
|
12
|
-
export type { RadioProps } from "./Radio/index.js";
|
|
11
|
+
export { Radio, RadioGroup } from "./Radio/index.js";
|
|
12
|
+
export type { RadioGroupOption, RadioGroupProps, RadioProps } from "./Radio/index.js";
|
|
13
13
|
export { Switch } from "./Switch/index.js";
|
|
14
14
|
export type { SwitchProps } from "./Switch/index.js";
|
|
15
15
|
export { Select } from "./Select/index.js";
|
|
@@ -46,22 +46,26 @@ export { TreeView } from "./TreeView/index.js";
|
|
|
46
46
|
export type { TreeViewItem, TreeViewProps } from "./TreeView/index.js";
|
|
47
47
|
export { Navbar } from "./Navbar/index.js";
|
|
48
48
|
export type { NavLink, NavbarProps } from "./Navbar/index.js";
|
|
49
|
+
export { NestedNavbar } from "./NestedNavbar/index.js";
|
|
50
|
+
export type { NestedNavItem, NavChildItem, NavbarMobileVariant, NestedNavbarProps } from "./NestedNavbar/index.js";
|
|
49
51
|
export { Sidebar } from "./Sidebar/index.js";
|
|
50
|
-
export type { SidebarItem, SidebarSection, SidebarProps } from "./Sidebar/index.js";
|
|
52
|
+
export type { SidebarItem, SidebarSection, SidebarMobileMode, SidebarPosition, SidebarCloseReason, SidebarCloseButtonRenderer, SidebarProps } from "./Sidebar/index.js";
|
|
53
|
+
export { NestedSidebar } from "./NestedSidebar/index.js";
|
|
54
|
+
export type { NestedSidebarItem, NestedSidebarChildItem, NestedSidebarSection, NestedSidebarMobileVariant, NestedSidebarPosition, NestedSidebarProps } from "./NestedSidebar/index.js";
|
|
51
55
|
export { DataTable } from "./DataTable/index.js";
|
|
52
|
-
export type { TableColumn, DataTableProps } from "./DataTable/index.js";
|
|
56
|
+
export type { DataTableRowEvent, DataTableSelectAllEvent, DataTableSelectionEvent, DataTableSortEvent, TableColumn, DataTableProps } from "./DataTable/index.js";
|
|
53
57
|
export { Dialog } from "./Dialog/index.js";
|
|
54
|
-
export type { DialogProps } from "./Dialog/index.js";
|
|
58
|
+
export type { DialogCloseButtonRenderer, DialogCloseReason, DialogProps } from "./Dialog/index.js";
|
|
55
59
|
export { Sheet } from "./Sheet/index.js";
|
|
56
|
-
export type { SheetProps } from "./Sheet/index.js";
|
|
60
|
+
export type { SheetCloseButtonRenderer, SheetCloseReason, SheetProps } from "./Sheet/index.js";
|
|
57
61
|
export { ToastRegion, useToast } from "./Toast/index.js";
|
|
58
62
|
export type { ToastData, ToastType, ToastPosition } from "./Toast/index.js";
|
|
59
63
|
export { Tooltip } from "./Tooltip/index.js";
|
|
60
64
|
export type { TooltipProps } from "./Tooltip/index.js";
|
|
61
65
|
export { Popover } from "./Popover/index.js";
|
|
62
|
-
export type { PopoverProps } from "./Popover/index.js";
|
|
66
|
+
export type { PopoverCloseReason, PopoverProps } from "./Popover/index.js";
|
|
63
67
|
export { DropdownMenu } from "./DropdownMenu/index.js";
|
|
64
|
-
export type { MenuItem as DropdownMenuItem, DropdownMenuProps } from "./DropdownMenu/index.js";
|
|
68
|
+
export type { MenuItem as DropdownMenuItem, DropdownMenuCloseReason, DropdownMenuProps } from "./DropdownMenu/index.js";
|
|
65
69
|
export { FocusTrap } from "./FocusTrap/index.js";
|
|
66
70
|
export type { FocusTrapProps } from "./FocusTrap/index.js";
|
|
67
71
|
export { ClickAwayListener } from "./ClickAwayListener/index.js";
|
|
@@ -132,8 +136,8 @@ export { List, ListSubheader, ListItem, ListItemIcon, ListItemText } from "./Lis
|
|
|
132
136
|
export type { ListSubheaderProps, ListProps, ListItemProps, ListItemIconProps, ListItemTextProps } from "./List/index.js";
|
|
133
137
|
export { PageLayout } from "./PageLayout/index.js";
|
|
134
138
|
export type { PageLayoutProps } from "./PageLayout/index.js";
|
|
135
|
-
export { DashboardLayout } from "./DashboardLayout/index.js";
|
|
136
|
-
export type { DashboardLayoutProps } from "./DashboardLayout/index.js";
|
|
139
|
+
export { AppShell, DashboardLayout } from "./DashboardLayout/index.js";
|
|
140
|
+
export type { AppShellProps, DashboardLayoutProps } from "./DashboardLayout/index.js";
|
|
137
141
|
export { SplitPane } from "./SplitPane/index.js";
|
|
138
142
|
export type { SplitPaneProps } from "./SplitPane/index.js";
|
|
139
143
|
export { ResizablePanel } from "./ResizablePanel/index.js";
|
|
@@ -142,10 +146,14 @@ export { AppBar, Toolbar, ToolbarSpacer } from "./AppBar/index.js";
|
|
|
142
146
|
export type { AppBarProps, AppBarPosition, AppBarColor, ToolbarProps } from "./AppBar/index.js";
|
|
143
147
|
export { Backdrop } from "./Backdrop/index.js";
|
|
144
148
|
export type { BackdropProps } from "./Backdrop/index.js";
|
|
149
|
+
export { Transition } from "./Transition/index.js";
|
|
150
|
+
export type { TransitionProps } from "./Transition/index.js";
|
|
151
|
+
export { TransitionGroup } from "./TransitionGroup/index.js";
|
|
152
|
+
export type { TransitionGroupProps } from "./TransitionGroup/index.js";
|
|
145
153
|
export { Modal } from "./Modal/index.js";
|
|
146
154
|
export type { ModalProps } from "./Modal/index.js";
|
|
147
155
|
export { Drawer } from "./Drawer/index.js";
|
|
148
|
-
export type { DrawerProps, DrawerAnchor, DrawerVariant, DrawerSize } from "./Drawer/index.js";
|
|
156
|
+
export type { DrawerProps, DrawerAnchor, DrawerVariant, DrawerSize, DrawerCloseReason, DrawerCloseButtonRenderer } from "./Drawer/index.js";
|
|
149
157
|
export { SnackbarRegion, useSnackbar } from "./Snackbar/index.js";
|
|
150
158
|
export type { SnackbarItem, SnackbarSeverity, SnackbarPosition, SnackbarRegionProps } from "./Snackbar/index.js";
|
|
151
159
|
export { CircularProgress } from "./CircularProgress/index.js";
|
|
@@ -155,9 +163,9 @@ export type { LinearProgressProps, LinearProgressVariant, LinearProgressColor }
|
|
|
155
163
|
export { BottomNavigation } from "./BottomNavigation/index.js";
|
|
156
164
|
export type { BottomNavigationProps, BottomNavigationActionDef } from "./BottomNavigation/index.js";
|
|
157
165
|
export { SpeedDial } from "./SpeedDial/index.js";
|
|
158
|
-
export type { SpeedDialProps, SpeedDialAction, SpeedDialDirection } from "./SpeedDial/index.js";
|
|
166
|
+
export type { SpeedDialProps, SpeedDialAction, SpeedDialDirection, SpeedDialPosition, SpeedDialCloseReason } from "./SpeedDial/index.js";
|
|
159
167
|
export { Menu, MenuList, MenuItem } from "./Menu/index.js";
|
|
160
|
-
export type { MenuProps, MenuListProps, MenuItemProps, MenuItemDef, MenuPlacement } from "./Menu/index.js";
|
|
168
|
+
export type { MenuProps, MenuListProps, MenuItemProps, MenuItemDef, MenuPlacement, MenuCloseReason } from "./Menu/index.js";
|
|
161
169
|
export { Collapse } from "./Collapse/index.js";
|
|
162
170
|
export type { CollapseProps } from "./Collapse/index.js";
|
|
163
171
|
export { Fade } from "./Fade/index.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhF,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"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"}
|
package/dist/components/index.js
CHANGED
|
@@ -4,7 +4,7 @@ export { Label } from "./Label/index.js";
|
|
|
4
4
|
export { Input } from "./Input/index.js";
|
|
5
5
|
export { Textarea } from "./Textarea/index.js";
|
|
6
6
|
export { Checkbox } from "./Checkbox/index.js";
|
|
7
|
-
export { Radio } from "./Radio/index.js";
|
|
7
|
+
export { Radio, RadioGroup } from "./Radio/index.js";
|
|
8
8
|
export { Switch } from "./Switch/index.js";
|
|
9
9
|
export { Select } from "./Select/index.js";
|
|
10
10
|
export { Spinner } from "./Spinner/index.js";
|
|
@@ -24,7 +24,9 @@ export { Stepper } from "./Stepper/index.js";
|
|
|
24
24
|
export { Timeline } from "./Timeline/index.js";
|
|
25
25
|
export { TreeView } from "./TreeView/index.js";
|
|
26
26
|
export { Navbar } from "./Navbar/index.js";
|
|
27
|
+
export { NestedNavbar } from "./NestedNavbar/index.js";
|
|
27
28
|
export { Sidebar } from "./Sidebar/index.js";
|
|
29
|
+
export { NestedSidebar } from "./NestedSidebar/index.js";
|
|
28
30
|
export { DataTable } from "./DataTable/index.js";
|
|
29
31
|
// Overlay components
|
|
30
32
|
export { Dialog } from "./Dialog/index.js";
|
|
@@ -74,13 +76,16 @@ export { ImageList } from "./ImageList/index.js";
|
|
|
74
76
|
export { List, ListSubheader, ListItem, ListItemIcon, ListItemText } from "./List/index.js";
|
|
75
77
|
// Enterprise layout components
|
|
76
78
|
export { PageLayout } from "./PageLayout/index.js";
|
|
77
|
-
export { DashboardLayout } from "./DashboardLayout/index.js";
|
|
79
|
+
export { AppShell, DashboardLayout } from "./DashboardLayout/index.js";
|
|
78
80
|
export { SplitPane } from "./SplitPane/index.js";
|
|
79
81
|
export { ResizablePanel } from "./ResizablePanel/index.js";
|
|
80
82
|
// App Bar
|
|
81
83
|
export { AppBar, Toolbar, ToolbarSpacer } from "./AppBar/index.js";
|
|
82
84
|
// Backdrop
|
|
83
85
|
export { Backdrop } from "./Backdrop/index.js";
|
|
86
|
+
// Transition / TransitionGroup
|
|
87
|
+
export { Transition } from "./Transition/index.js";
|
|
88
|
+
export { TransitionGroup } from "./TransitionGroup/index.js";
|
|
84
89
|
// Modal
|
|
85
90
|
export { Modal } from "./Modal/index.js";
|
|
86
91
|
// Drawer
|
package/dist/portal.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"portal.d.ts","sourceRoot":"","sources":["../src/portal.ts"],"names":[],"mappings":"AACA,OAAO,EAAK,KAAK,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAIjD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,KAAK,
|
|
1
|
+
{"version":3,"file":"portal.d.ts","sourceRoot":"","sources":["../src/portal.ts"],"names":[],"mappings":"AACA,OAAO,EAAK,KAAK,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAIjD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,KAAK,CAmBtE"}
|
package/dist/portal.js
CHANGED
|
@@ -6,6 +6,9 @@ export function renderInPortal(children, layer) {
|
|
|
6
6
|
return h("span", { "data-hu-portal": layer }, children);
|
|
7
7
|
}
|
|
8
8
|
const root = document.createElement("div");
|
|
9
|
+
if (!root || !root.dataset || typeof document.body.appendChild !== "function") {
|
|
10
|
+
return h("span", { "data-hu-portal": layer }, children);
|
|
11
|
+
}
|
|
9
12
|
root.className = "hu-portal-root";
|
|
10
13
|
root.dataset.huPortal = layer;
|
|
11
14
|
root.dataset.huPortalId = String(++portalId);
|