@kerfjs/ui 4.4.1 → 5.0.0-beta.4
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 +234 -5
- package/ai/component-catalog.json +4473 -0
- package/ai/component-catalog.schema.json +79 -0
- package/ai/public-api-signatures-v1.md +619 -0
- package/ai/skill.md +65 -11
- package/ai/webawesome-jsx-signatures-v1.md +106 -0
- package/dist/app-tab.d.ts +12 -2
- package/dist/app-tab.js +2 -1
- package/dist/browser/app-tab.js +2 -2
- package/dist/browser/dialog-header.js +4 -2
- package/dist/browser/disclosure-arrow.js +4 -0
- package/dist/browser/empty-state.js +3 -3
- package/dist/browser/loading-spinner.js +2 -2
- package/dist/browser/lucide-icon.js +2 -2
- package/dist/browser/menu-action-row.js +3 -0
- package/dist/browser/menu-header.js +4 -2
- package/dist/browser/menu-item.js +2 -2
- package/dist/browser/page-header.js +2 -2
- package/dist/browser/resizable-region.js +2 -2
- package/dist/browser/segmented-control.js +2 -2
- package/dist/browser/select.js +3 -3
- package/dist/browser/state-banner.js +2 -2
- package/dist/browser/tab-bar.js +2 -2
- package/dist/browser/token-search-field.js +4 -0
- package/dist/browser/toolbar-control-group.js +2 -2
- package/dist/browser/toolbar-text.js +2 -2
- package/dist/browser/toolbar.js +2 -2
- package/dist/browser/value-table.js +2 -2
- package/dist/chunk-56RJXPHG.js +43 -0
- package/dist/chunk-56RJXPHG.js.map +1 -0
- package/dist/chunk-7BR3DO2A.js +31 -0
- package/dist/chunk-7BR3DO2A.js.map +1 -0
- package/dist/chunk-7LDCTU7D.js +134 -0
- package/dist/chunk-7LDCTU7D.js.map +1 -0
- package/dist/{chunk-4HHCYSGT.js → chunk-AQNKJRFH.js} +2 -2
- package/dist/{chunk-4HHCYSGT.js.map → chunk-AQNKJRFH.js.map} +1 -1
- package/dist/{chunk-NHXX4JI5.js → chunk-CTQKI2XL.js} +3 -3
- package/dist/chunk-CTQKI2XL.js.map +1 -0
- package/dist/chunk-EGHL5S4P.js +33 -0
- package/dist/chunk-EGHL5S4P.js.map +1 -0
- package/dist/chunk-H5AGGVU5.js +75 -0
- package/dist/chunk-H5AGGVU5.js.map +1 -0
- package/dist/chunk-K3G72I6D.js +24 -0
- package/dist/chunk-K3G72I6D.js.map +1 -0
- package/dist/{chunk-3O7ZEUW2.js → chunk-M5JRI6MN.js} +3 -3
- package/dist/chunk-M5JRI6MN.js.map +1 -0
- package/dist/chunk-NPPD2A6O.js +40 -0
- package/dist/chunk-NPPD2A6O.js.map +1 -0
- package/dist/chunk-R6JHHBKQ.js +19 -0
- package/dist/chunk-R6JHHBKQ.js.map +1 -0
- package/dist/chunk-S3TPM2LP.js +23 -0
- package/dist/chunk-S3TPM2LP.js.map +1 -0
- package/dist/{chunk-T5XNMVOI.js → chunk-XZXRLY5Q.js} +14 -5
- package/dist/chunk-XZXRLY5Q.js.map +1 -0
- package/dist/dialog-header.d.ts +3 -2
- package/dist/dialog-header.js +3 -1
- package/dist/disclosure-arrow.d.ts +14 -0
- package/dist/disclosure-arrow.js +4 -0
- package/dist/disclosure-arrow.js.map +1 -0
- package/dist/index.d.ts +5 -1
- package/dist/index.js +16 -11
- package/dist/menu-action-row.d.ts +50 -0
- package/dist/menu-action-row.js +4 -0
- package/dist/menu-action-row.js.map +1 -0
- package/dist/menu-header.d.ts +28 -2
- package/dist/menu-header.js +4 -1
- package/dist/menu-item.d.ts +10 -1
- package/dist/menu-item.js +2 -1
- package/dist/resizable-region.d.ts +3 -1
- package/dist/resizable-region.js +1 -1
- package/dist/select.js +1 -1
- package/dist/styles/app-tab.css +152 -0
- package/dist/styles/dialog-header.css +87 -0
- package/dist/styles/disclosure-arrow.css +23 -0
- package/dist/styles/empty-state.css +47 -0
- package/dist/styles/foundation.css +326 -0
- package/dist/styles/layout.css +73 -0
- package/dist/styles/loading-spinner.css +21 -0
- package/dist/styles/lucide-icon.css +6 -0
- package/dist/styles/menu-action-row.css +160 -0
- package/dist/styles/menu-header.css +143 -0
- package/dist/styles/menu-item.css +123 -0
- package/dist/styles/page-header.css +33 -0
- package/dist/styles/resizable-region.css +111 -0
- package/{src → dist/styles}/segmented-control.css +62 -31
- package/dist/styles/select.css +96 -0
- package/dist/styles/state-banner.css +173 -0
- package/dist/styles/styles.css +22 -0
- package/dist/styles/tab-bar.css +45 -0
- package/dist/styles/token-search-field.css +281 -0
- package/dist/styles/toolbar-control-group.css +161 -0
- package/dist/styles/toolbar-text.css +29 -0
- package/dist/styles/toolbar.css +52 -0
- package/dist/styles/value-table.css +75 -0
- package/{src → dist/styles}/webawesome.css +119 -29
- package/dist/token-search-field.d.ts +43 -0
- package/dist/token-search-field.js +4 -0
- package/dist/token-search-field.js.map +1 -0
- package/dist/value-table.d.ts +10 -2
- package/dist/value-table.js +1 -1
- package/dist/webawesome.d.ts +100 -0
- package/dist/webawesome.js +3 -0
- package/dist/webawesome.js.map +1 -0
- package/dist/wire-resizable-regions.js +1 -1
- package/dist/wire-token-search-fields.d.ts +11 -0
- package/dist/wire-token-search-fields.js +5 -0
- package/dist/wire-token-search-fields.js.map +1 -0
- package/docs/accessibility.md +60 -3
- package/docs/component-contract.md +131 -3
- package/docs/component-selection.md +133 -0
- package/docs/design-philosophy.md +38 -0
- package/docs/examples/command-palette-adapter.tsx +70 -0
- package/docs/layout.md +106 -0
- package/docs/recipes.md +124 -0
- package/docs/ux-demo.md +23 -9
- package/docs/webawesome-theme.md +15 -0
- package/llms.txt +25 -2
- package/package.json +70 -27
- package/ux-demo/recipes/app-shell.tsx +32 -0
- package/ux-demo/recipes/compact-toolbar.tsx +43 -0
- package/ux-demo/recipes/composer-form.tsx +63 -0
- package/ux-demo/recipes/list-workspace-states.tsx +26 -0
- package/ux-demo/recipes/loaders.ts +27 -0
- package/ux-demo/recipes/master-detail-dialog.tsx +45 -0
- package/ux-demo/recipes/mount-recipe.ts +38 -0
- package/ux-demo/recipes/navigation-sidebar.tsx +26 -0
- package/ux-demo/recipes/recipes.css +344 -0
- package/ux-demo/recipes/types.ts +11 -0
- package/ux-demo/recipes/workspace-header.tsx +12 -0
- package/dist/chunk-3O7ZEUW2.js.map +0 -1
- package/dist/chunk-723YNJBH.js +0 -17
- package/dist/chunk-723YNJBH.js.map +0 -1
- package/dist/chunk-NHXX4JI5.js.map +0 -1
- package/dist/chunk-OPCJRCYO.js +0 -19
- package/dist/chunk-OPCJRCYO.js.map +0 -1
- package/dist/chunk-T5XNMVOI.js.map +0 -1
- package/dist/chunk-VKH2JLDZ.js +0 -10
- package/dist/chunk-VKH2JLDZ.js.map +0 -1
- package/dist/chunk-WY4CAEPG.js +0 -14
- package/dist/chunk-WY4CAEPG.js.map +0 -1
- package/src/app-tab.css +0 -20
- package/src/dialog-header.css +0 -9
- package/src/empty-state.css +0 -6
- package/src/foundation.css +0 -106
- package/src/loading-spinner.css +0 -4
- package/src/lucide-icon.css +0 -1
- package/src/menu-header.css +0 -13
- package/src/menu-item.css +0 -12
- package/src/page-header.css +0 -3
- package/src/resizable-region.css +0 -19
- package/src/select.css +0 -18
- package/src/state-banner.css +0 -31
- package/src/styles.css +0 -18
- package/src/tab-bar.css +0 -4
- package/src/toolbar-control-group.css +0 -25
- package/src/toolbar-text.css +0 -4
- package/src/toolbar.css +0 -9
- package/src/value-table.css +0 -5
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/menu-item.tsx"],"names":[],"mappings":";;;AAIA,IAAM,8BAAA,uBAAqC,GAAA,CAAI;AAAA,EAC7C,gBAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA,eAAA;AAAA,EACA,gBAAA;AAAA,EACA;AACF,CAAC,CAAA;AAgCM,SAAS,QAAA,CAAS,EAAE,KAAA,EAAO,IAAA,EAAM,QAAA,EAAU,WAAW,KAAA,EAAO,MAAA,EAAQ,MAAA,EAAQ,SAAA,GAAY,EAAA,EAAI,KAAA,EAAO,SAAS,eAAA,EAAiB,KAAA,EAAO,SAAA,GAAY,KAAA,EAAO,KAAA,EAAO,QAAA,GAAW,OAAO,QAAA,EAAU,cAAA,GAAiB,EAAC,EAAE,EAAkB;AACtO,EAAA,MAAM,mBAAA,GAAsB,oBAAA,CAAqB,cAAA,EAAgB,8BAA8B,CAAA;AAC/F,EAAA,uBAAO,IAAA,CAAC,YAAQ,GAAG,mBAAA,EAAqB,MAAK,QAAA,EAAS,KAAA,EAAO,iBAAiB,SAAS,CAAA,CAAA,CAAG,MAAK,EAAG,KAAA,EAAc,OAAc,QAAA,EAAoB,QAAA,EAAU,UAAU,gBAAA,EAAe,WAAA,EAAY,aAAA,EAAa,MAAA,EAAQ,cAAA,EAAc,MAAA,EAAQ,iBAAe,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAC,CAAA,EAAG,kBAAgB,SAAA,GAAY,MAAA,GAAS,MAAA,EAAW,YAAA,EAAY,KAAA,EAAO,YAAA,EAAY,iBAAiB,cAAA,EAAc,QAAA,GAAW,SAAS,MAAA,EAAW,cAAA,EAAc,YAAY,MAAA,GAAY,MAAA,GAAY,MAAA,CAAO,OAAO,CAAA,EAC5d,QAAA,EAAA;AAAA,IAAA,IAAA,oBAAQ,GAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAM,qBAAA,EAAuB,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,oBACjD,GAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAM,sBAAA,EAAwB,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,IACzC,QAAA,oBAAY,GAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAM,2BAA2B,QAAA,EAAA,QAAA,EAAS;AAAA,GAAA,EAC/D,CAAA;AACF","file":"chunk-S3TPM2LP.js","sourcesContent":["import type { SafeHtml } from 'kerfjs';\n\nimport { filterDataAttributes } from './extension-attributes.js';\n\nconst PROTECTED_ROOT_DATA_ATTRIBUTES = new Set([\n 'data-component',\n 'data-action',\n 'data-item-id',\n 'data-has-icon',\n 'data-multiline',\n 'data-state',\n]);\n\ntype MenuItemRootAttributes = Readonly<\n Record<`data-${string}`, string | undefined> & {\n 'data-component'?: never;\n 'data-action'?: never;\n 'data-item-id'?: never;\n 'data-has-icon'?: never;\n 'data-multiline'?: never;\n 'data-state'?: never;\n }\n>;\n\nexport interface MenuItemProps {\n label: string | SafeHtml;\n icon?: SafeHtml;\n trailing?: SafeHtml;\n selected?: boolean;\n action: string;\n itemId?: string;\n className?: string;\n style?: string;\n pressed?: boolean;\n accessibleLabel?: string;\n title?: string;\n multiline?: boolean;\n state?: string;\n disabled?: boolean;\n tabIndex?: number;\n rootAttributes?: MenuItemRootAttributes;\n}\n\nexport function MenuItem({ label, icon, trailing, selected = false, action, itemId, className = '', style, pressed, accessibleLabel, title, multiline = false, state, disabled = false, tabIndex, rootAttributes = {} }: MenuItemProps) {\n const extensionAttributes = filterDataAttributes(rootAttributes, PROTECTED_ROOT_DATA_ATTRIBUTES);\n return <button {...extensionAttributes} type=\"button\" class={`kui-menu-item ${className}`.trim()} style={style} title={title} disabled={disabled} tabindex={tabIndex} data-component=\"menu-item\" data-action={action} data-item-id={itemId} data-has-icon={String(Boolean(icon))} data-multiline={multiline ? 'true' : undefined} data-state={state} aria-label={accessibleLabel} aria-current={selected ? 'page' : undefined} aria-pressed={pressed === undefined ? undefined : String(pressed)}>\n {icon && <span class=\"kui-menu-item__icon\">{icon}</span>}\n <span class=\"kui-menu-item__label\">{label}</span>\n {trailing && <span class=\"kui-menu-item__trailing\">{trailing}</span>}\n </button>;\n}\n"]}
|
|
@@ -1,16 +1,25 @@
|
|
|
1
|
+
import { filterDataAttributes } from './chunk-7BR3DO2A.js';
|
|
1
2
|
import { jsxs, jsx } from 'kerfjs/jsx-runtime';
|
|
2
3
|
|
|
3
|
-
|
|
4
|
+
var PROTECTED_ROOT_DATA_ATTRIBUTES = /* @__PURE__ */ new Set([
|
|
5
|
+
"data-component",
|
|
6
|
+
"data-action",
|
|
7
|
+
"data-tab-id",
|
|
8
|
+
"data-selected",
|
|
9
|
+
"data-tab-dragging",
|
|
10
|
+
"data-tab-drop-position"
|
|
11
|
+
]);
|
|
4
12
|
function CloseIcon() {
|
|
5
13
|
return /* @__PURE__ */ jsxs("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": "2.25", "stroke-linecap": "round", children: [
|
|
6
14
|
/* @__PURE__ */ jsx("path", { d: "m7 7 10 10" }),
|
|
7
15
|
/* @__PURE__ */ jsx("path", { d: "M17 7 7 17" })
|
|
8
16
|
] });
|
|
9
17
|
}
|
|
10
|
-
function AppTab({ id, name, selected = false, closable = true, draggable = false, leading, trailing, selectAction = "select-tab", closeAction = "close-tab", className = "", rootAttributes = {} }) {
|
|
18
|
+
function AppTab({ id, name, selected = false, closable = true, draggable = false, leading, trailing, closeIcon, selectAction = "select-tab", closeAction = "close-tab", className = "", rootAttributes = {} }) {
|
|
11
19
|
const keyshortcuts = [closable ? "Delete Backspace" : "", draggable ? "Alt+Shift+ArrowLeft Alt+Shift+ArrowRight" : ""].filter(Boolean).join(" ");
|
|
12
|
-
|
|
13
|
-
|
|
20
|
+
const extensionAttributes = filterDataAttributes(rootAttributes, PROTECTED_ROOT_DATA_ATTRIBUTES);
|
|
21
|
+
return /* @__PURE__ */ jsxs("div", { ...extensionAttributes, class: `kui-app-tab ${className}`.trim(), "data-component": "app-tab", "data-tab-id": id, "data-selected": String(selected), draggable: draggable ? "true" : "false", children: [
|
|
22
|
+
closable && /* @__PURE__ */ jsx("button", { type: "button", tabindex: "-1", class: "kui-app-tab__close", "data-action": closeAction, "data-tab-id": id, "aria-label": `Close ${name}`, title: `Close ${name}`, children: /* @__PURE__ */ jsx("span", { class: "kui-app-tab__close-icon", "aria-hidden": "true", children: closeIcon ?? /* @__PURE__ */ jsx(CloseIcon, {}) }) }),
|
|
14
23
|
/* @__PURE__ */ jsxs("button", { type: "button", class: "kui-app-tab__select", role: "tab", "aria-selected": String(selected), "aria-keyshortcuts": keyshortcuts || void 0, "data-action": selectAction, "data-tab-id": id, tabindex: selected ? "0" : "-1", children: [
|
|
15
24
|
leading,
|
|
16
25
|
/* @__PURE__ */ jsx("span", { class: "kui-app-tab__name", children: name }),
|
|
@@ -21,4 +30,4 @@ function AppTab({ id, name, selected = false, closable = true, draggable = false
|
|
|
21
30
|
|
|
22
31
|
export { AppTab };
|
|
23
32
|
|
|
24
|
-
//# sourceMappingURL=chunk-
|
|
33
|
+
//# sourceMappingURL=chunk-XZXRLY5Q.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/app-tab.tsx"],"names":[],"mappings":";;;AAIA,IAAM,8BAAA,uBAAqC,GAAA,CAAI;AAAA,EAC7C,gBAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,eAAA;AAAA,EACA,mBAAA;AAAA,EACA;AACF,CAAC,CAAA;AA6BD,SAAS,SAAA,GAAY;AACnB,EAAA,uBAAO,IAAA,CAAC,KAAA,EAAA,EAAI,aAAA,EAAY,MAAA,EAAO,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAK,MAAA,EAAO,MAAA,EAAO,cAAA,EAAe,cAAA,EAAa,MAAA,EAAO,kBAAe,OAAA,EAAQ,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,GAAE,YAAA,EAAa,CAAA;AAAA,oBAAO,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,YAAA,EAAa;AAAA,GAAA,EAAO,CAAA;AAC1L;AAEO,SAAS,MAAA,CAAO,EAAE,EAAA,EAAI,IAAA,EAAM,WAAW,KAAA,EAAO,QAAA,GAAW,IAAA,EAAM,SAAA,GAAY,KAAA,EAAO,OAAA,EAAS,UAAU,SAAA,EAAW,YAAA,GAAe,cAAc,WAAA,GAAc,WAAA,EAAa,YAAY,EAAA,EAAI,cAAA,GAAiB,EAAC,EAAE,EAAgB;AACjO,EAAA,MAAM,YAAA,GAAe,CAAC,QAAA,GAAW,kBAAA,GAAqB,EAAA,EAAI,SAAA,GAAY,0CAAA,GAA6C,EAAE,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA;AAC/I,EAAA,MAAM,mBAAA,GAAsB,oBAAA,CAAqB,cAAA,EAAgB,8BAA8B,CAAA;AAC/F,EAAA,uBAAO,IAAA,CAAC,SAAK,GAAG,mBAAA,EAAqB,OAAO,CAAA,YAAA,EAAe,SAAS,GAAG,IAAA,EAAK,EAAG,kBAAe,SAAA,EAAU,aAAA,EAAa,IAAI,eAAA,EAAe,MAAA,CAAO,QAAQ,CAAA,EAAG,SAAA,EAAW,SAAA,GAAY,MAAA,GAAS,OAAA,EACvL,QAAA,EAAA;AAAA,IAAA,QAAA,oBAAY,GAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,QAAA,EAAS,IAAA,EAAK,KAAA,EAAM,oBAAA,EAAqB,aAAA,EAAa,WAAA,EAAa,aAAA,EAAa,EAAA,EAAI,cAAY,CAAA,MAAA,EAAS,IAAI,CAAA,CAAA,EAAI,KAAA,EAAO,CAAA,MAAA,EAAS,IAAI,CAAA,CAAA,EAAI,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAM,yBAAA,EAA0B,aAAA,EAAY,MAAA,EAAQ,QAAA,EAAA,SAAA,oBAAa,GAAA,CAAC,SAAA,EAAA,EAAU,GAAG,CAAA,EAAO,CAAA;AAAA,oBACxQ,IAAA,CAAC,YAAO,IAAA,EAAK,QAAA,EAAS,OAAM,qBAAA,EAAsB,IAAA,EAAK,KAAA,EAAM,eAAA,EAAe,MAAA,CAAO,QAAQ,GAAG,mBAAA,EAAmB,YAAA,IAAgB,QAAW,aAAA,EAAa,YAAA,EAAc,eAAa,EAAA,EAAI,QAAA,EAAU,QAAA,GAAW,GAAA,GAAM,IAAA,EAChN,QAAA,EAAA;AAAA,MAAA,OAAA;AAAA,sBAAQ,GAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAM,mBAAA,EAAqB,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,MAAQ,YAAY,QAAA,mBAAW,GAAA,CAAC,UAAK,KAAA,EAAM,uBAAA,EAAyB,oBAAS,CAAA,GAAU;AAAA,KAAA,EACxI;AAAA,GAAA,EACF,CAAA;AACF","file":"chunk-XZXRLY5Q.js","sourcesContent":["import type { SafeHtml } from 'kerfjs';\n\nimport { filterDataAttributes } from './extension-attributes.js';\n\nconst PROTECTED_ROOT_DATA_ATTRIBUTES = new Set([\n 'data-component',\n 'data-action',\n 'data-tab-id',\n 'data-selected',\n 'data-tab-dragging',\n 'data-tab-drop-position',\n]);\n\ntype AppTabRootAttributes = Readonly<\n Record<`data-${string}`, string | undefined> & {\n 'data-component'?: never;\n 'data-action'?: never;\n 'data-tab-id'?: never;\n 'data-selected'?: never;\n 'data-tab-dragging'?: never;\n 'data-tab-drop-position'?: never;\n }\n>;\n\nexport interface AppTabProps {\n id: string;\n name: string;\n selected?: boolean;\n closable?: boolean;\n draggable?: boolean;\n leading?: SafeHtml;\n trailing?: SafeHtml;\n /** Decorative dormant content for the close button. Must not contain interactive descendants. */\n closeIcon?: SafeHtml;\n selectAction?: string;\n closeAction?: string;\n className?: string;\n rootAttributes?: AppTabRootAttributes;\n}\n\nfunction CloseIcon() {\n return <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.25\" stroke-linecap=\"round\"><path d=\"m7 7 10 10\"></path><path d=\"M17 7 7 17\"></path></svg>;\n}\n\nexport function AppTab({ id, name, selected = false, closable = true, draggable = false, leading, trailing, closeIcon, selectAction = 'select-tab', closeAction = 'close-tab', className = '', rootAttributes = {} }: AppTabProps) {\n const keyshortcuts = [closable ? 'Delete Backspace' : '', draggable ? 'Alt+Shift+ArrowLeft Alt+Shift+ArrowRight' : ''].filter(Boolean).join(' ');\n const extensionAttributes = filterDataAttributes(rootAttributes, PROTECTED_ROOT_DATA_ATTRIBUTES);\n return <div {...extensionAttributes} class={`kui-app-tab ${className}`.trim()} data-component=\"app-tab\" data-tab-id={id} data-selected={String(selected)} draggable={draggable ? 'true' : 'false'}>\n {closable && <button type=\"button\" tabindex=\"-1\" class=\"kui-app-tab__close\" data-action={closeAction} data-tab-id={id} aria-label={`Close ${name}`} title={`Close ${name}`}><span class=\"kui-app-tab__close-icon\" aria-hidden=\"true\">{closeIcon ?? <CloseIcon />}</span></button>}\n <button type=\"button\" class=\"kui-app-tab__select\" role=\"tab\" aria-selected={String(selected)} aria-keyshortcuts={keyshortcuts || undefined} data-action={selectAction} data-tab-id={id} tabindex={selected ? '0' : '-1'}>\n {leading}<span class=\"kui-app-tab__name\">{name}</span>{closable || trailing ? <span class=\"kui-app-tab__trailing\">{trailing}</span> : undefined}\n </button>\n </div>;\n}\n"]}
|
package/dist/dialog-header.d.ts
CHANGED
|
@@ -3,12 +3,13 @@ import { SafeHtml } from 'kerfjs';
|
|
|
3
3
|
interface DialogHeaderProps {
|
|
4
4
|
title: string;
|
|
5
5
|
titleId: string;
|
|
6
|
-
summary
|
|
6
|
+
summary?: string;
|
|
7
7
|
summaryId?: string;
|
|
8
8
|
icon?: SafeHtml;
|
|
9
9
|
iconClassName?: string;
|
|
10
10
|
actions?: SafeHtml;
|
|
11
|
+
actionsLabel?: string;
|
|
11
12
|
}
|
|
12
|
-
declare function DialogHeader({ title, titleId, summary, summaryId, icon, iconClassName, actions }: DialogHeaderProps): SafeHtml;
|
|
13
|
+
declare function DialogHeader({ title, titleId, summary, summaryId, icon, iconClassName, actions, actionsLabel }: DialogHeaderProps): SafeHtml;
|
|
13
14
|
|
|
14
15
|
export { DialogHeader, type DialogHeaderProps };
|
package/dist/dialog-header.js
CHANGED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { SafeHtml } from 'kerfjs';
|
|
2
|
+
|
|
3
|
+
type DisclosureDirection = 'up' | 'down' | 'left' | 'right';
|
|
4
|
+
interface DisclosureArrowProps {
|
|
5
|
+
open: boolean;
|
|
6
|
+
openDirection?: DisclosureDirection;
|
|
7
|
+
closedDirection?: DisclosureDirection;
|
|
8
|
+
/** Replacement icons should use right as their unrotated orientation. */
|
|
9
|
+
icon?: SafeHtml;
|
|
10
|
+
className?: string;
|
|
11
|
+
}
|
|
12
|
+
declare function DisclosureArrow({ open, openDirection, closedDirection, icon, className, }: DisclosureArrowProps): SafeHtml;
|
|
13
|
+
|
|
14
|
+
export { DisclosureArrow, type DisclosureArrowProps, type DisclosureDirection };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"disclosure-arrow.js"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
export { AppTab, AppTabProps } from './app-tab.js';
|
|
2
2
|
export { DialogHeader, DialogHeaderProps } from './dialog-header.js';
|
|
3
|
+
export { DisclosureArrow, DisclosureArrowProps, DisclosureDirection } from './disclosure-arrow.js';
|
|
3
4
|
export { EmptyState, EmptyStateProps } from './empty-state.js';
|
|
4
5
|
export { LoadingSpinner, LoadingSpinnerProps } from './loading-spinner.js';
|
|
5
6
|
export { LucideIcon, LucideIconProps, LucideNode } from './lucide-icon.js';
|
|
7
|
+
export { MenuActionRow, MenuActionRowProps } from './menu-action-row.js';
|
|
6
8
|
export { MenuHeader, MenuHeaderProps } from './menu-header.js';
|
|
7
9
|
export { MenuItem, MenuItemProps } from './menu-item.js';
|
|
8
10
|
export { PageHeader, PageHeaderProps } from './page-header.js';
|
|
@@ -11,11 +13,13 @@ export { SegmentedControl, SegmentedControlAppearance, SegmentedControlChoice, S
|
|
|
11
13
|
export { Select, SelectChoice, SelectProps } from './select.js';
|
|
12
14
|
export { StateBanner, StateBannerProps, StateBannerTone } from './state-banner.js';
|
|
13
15
|
export { TabBar, TabBarProps } from './tab-bar.js';
|
|
16
|
+
export { TokenSearchField, TokenSearchFieldProps, TokenSearchFieldValue, TokenSearchToken, placeTokenSearchCaret, readTokenSearchField } from './token-search-field.js';
|
|
14
17
|
export { Toolbar, ToolbarProps } from './toolbar.js';
|
|
15
18
|
export { ToolbarControlGroup, ToolbarControlGroupProps } from './toolbar-control-group.js';
|
|
16
19
|
export { ToolbarText, ToolbarTextProps, ToolbarTextSize } from './toolbar-text.js';
|
|
17
|
-
export { ValueTable, ValueTableProps } from './value-table.js';
|
|
20
|
+
export { ValueTable, ValueTableProps, ValueTableRow, ValueTableRowProps } from './value-table.js';
|
|
18
21
|
export { ResizeCommit, WireResizableRegionsOptions, wireResizableRegions } from './wire-resizable-regions.js';
|
|
19
22
|
export { TabDropPosition, TabReorder, TabReorderSource, WireTabBarsOptions, reorderTabs, wireTabBars } from './wire-tab-bars.js';
|
|
23
|
+
export { TokenSearchSubmit, WireTokenSearchFieldsOptions, wireTokenSearchFields } from './wire-token-search-fields.js';
|
|
20
24
|
import 'kerfjs';
|
|
21
25
|
import 'lucide';
|
package/dist/index.js
CHANGED
|
@@ -1,21 +1,26 @@
|
|
|
1
|
-
export { ToolbarText } from './chunk-GY5WH7TO.js';
|
|
2
|
-
export { Toolbar } from './chunk-DAFFDO33.js';
|
|
3
|
-
export { ValueTable } from './chunk-VKH2JLDZ.js';
|
|
4
|
-
export { wireResizableRegions } from './chunk-4HHCYSGT.js';
|
|
5
1
|
export { reorderTabs, wireTabBars } from './chunk-MQIZAD4A.js';
|
|
2
|
+
export { wireTokenSearchFields } from './chunk-H5AGGVU5.js';
|
|
3
|
+
export { TabBar } from './chunk-MBR3TYNL.js';
|
|
4
|
+
export { TokenSearchField, placeTokenSearchCaret, readTokenSearchField } from './chunk-7LDCTU7D.js';
|
|
5
|
+
export { ToolbarText } from './chunk-GY5WH7TO.js';
|
|
6
|
+
export { ValueTable, ValueTableRow } from './chunk-R6JHHBKQ.js';
|
|
7
|
+
export { wireResizableRegions } from './chunk-AQNKJRFH.js';
|
|
8
|
+
export { MenuHeader } from './chunk-NPPD2A6O.js';
|
|
9
|
+
export { MenuItem } from './chunk-S3TPM2LP.js';
|
|
6
10
|
export { PageHeader } from './chunk-2PES33HS.js';
|
|
7
|
-
export { ResizableRegion, clampRegionSize, resizeRegionFromPointer } from './chunk-
|
|
11
|
+
export { ResizableRegion, clampRegionSize, resizeRegionFromPointer } from './chunk-M5JRI6MN.js';
|
|
8
12
|
export { SegmentedControl } from './chunk-TRNBHPNW.js';
|
|
9
|
-
export { Select } from './chunk-
|
|
13
|
+
export { Select } from './chunk-CTQKI2XL.js';
|
|
10
14
|
export { StateBanner } from './chunk-VHW5YNIB.js';
|
|
11
|
-
export {
|
|
15
|
+
export { AppTab } from './chunk-XZXRLY5Q.js';
|
|
16
|
+
export { DialogHeader } from './chunk-K3G72I6D.js';
|
|
12
17
|
export { ToolbarControlGroup } from './chunk-MFKMHK5W.js';
|
|
13
|
-
export {
|
|
14
|
-
export {
|
|
18
|
+
export { Toolbar } from './chunk-DAFFDO33.js';
|
|
19
|
+
export { DisclosureArrow } from './chunk-56RJXPHG.js';
|
|
15
20
|
export { EmptyState } from './chunk-WVPYVDXY.js';
|
|
16
21
|
export { LoadingSpinner } from './chunk-55DATV3A.js';
|
|
17
22
|
export { LucideIcon } from './chunk-W2FK7ZNY.js';
|
|
18
|
-
export {
|
|
19
|
-
|
|
23
|
+
export { MenuActionRow } from './chunk-EGHL5S4P.js';
|
|
24
|
+
|
|
20
25
|
|
|
21
26
|
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { SafeHtml } from 'kerfjs';
|
|
2
|
+
|
|
3
|
+
type MenuActionRowRootAttributes = Readonly<Record<`data-${string}`, string | undefined> & {
|
|
4
|
+
'data-component'?: never;
|
|
5
|
+
'data-action'?: never;
|
|
6
|
+
'data-item-id'?: never;
|
|
7
|
+
'data-has-icon'?: never;
|
|
8
|
+
'data-multiline'?: never;
|
|
9
|
+
'data-state'?: never;
|
|
10
|
+
'data-selected'?: never;
|
|
11
|
+
'data-pressed'?: never;
|
|
12
|
+
}>;
|
|
13
|
+
type MenuActionRowTrailingAttributes = Readonly<Record<`data-${string}`, string | undefined> & {
|
|
14
|
+
'data-component'?: never;
|
|
15
|
+
'data-action'?: never;
|
|
16
|
+
'data-item-id'?: never;
|
|
17
|
+
popoverTarget?: string;
|
|
18
|
+
popoverTargetAction?: 'toggle' | 'show' | 'hide';
|
|
19
|
+
'aria-controls'?: string;
|
|
20
|
+
'aria-haspopup'?: 'dialog' | 'menu' | 'listbox' | 'tree' | 'grid' | 'true';
|
|
21
|
+
}>;
|
|
22
|
+
interface MenuActionRowProps {
|
|
23
|
+
/** Visible dormant content for the primary button. Must not contain interactive descendants. */
|
|
24
|
+
label: string | SafeHtml;
|
|
25
|
+
/** Decorative dormant content for the primary button. Must not contain interactive descendants. */
|
|
26
|
+
icon?: SafeHtml;
|
|
27
|
+
action: string;
|
|
28
|
+
itemId?: string;
|
|
29
|
+
selected?: boolean;
|
|
30
|
+
pressed?: boolean;
|
|
31
|
+
accessibleLabel?: string;
|
|
32
|
+
title?: string;
|
|
33
|
+
multiline?: boolean;
|
|
34
|
+
state?: string;
|
|
35
|
+
disabled?: boolean;
|
|
36
|
+
tabIndex?: number;
|
|
37
|
+
trailingAction: string;
|
|
38
|
+
trailingActionLabel: string;
|
|
39
|
+
/** Decorative dormant content for the trailing button. Must not contain interactive descendants. */
|
|
40
|
+
trailingActionIcon: SafeHtml;
|
|
41
|
+
trailingActionDisabled?: boolean;
|
|
42
|
+
trailingActionTitle?: string;
|
|
43
|
+
className?: string;
|
|
44
|
+
style?: string;
|
|
45
|
+
rootAttributes?: MenuActionRowRootAttributes;
|
|
46
|
+
trailingActionAttributes?: MenuActionRowTrailingAttributes;
|
|
47
|
+
}
|
|
48
|
+
declare function MenuActionRow({ label, icon, action, itemId, selected, pressed, accessibleLabel, title, multiline, state, disabled, tabIndex, trailingAction, trailingActionLabel, trailingActionIcon, trailingActionDisabled, trailingActionTitle, className, style, rootAttributes, trailingActionAttributes }: MenuActionRowProps): SafeHtml;
|
|
49
|
+
|
|
50
|
+
export { MenuActionRow, type MenuActionRowProps };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"menu-action-row.js"}
|
package/dist/menu-header.d.ts
CHANGED
|
@@ -1,6 +1,20 @@
|
|
|
1
1
|
import { SafeHtml } from 'kerfjs';
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
type MenuHeaderRootAttributes = Readonly<Record<`data-${string}`, string | undefined> & {
|
|
4
|
+
'data-component'?: never;
|
|
5
|
+
'data-action'?: never;
|
|
6
|
+
'data-has-badge'?: never;
|
|
7
|
+
'data-has-count'?: never;
|
|
8
|
+
'data-toggle'?: never;
|
|
9
|
+
}>;
|
|
10
|
+
type MenuHeaderTriggerAttributes = Readonly<Record<`data-${string}`, string | undefined> & {
|
|
11
|
+
'data-action'?: never;
|
|
12
|
+
popoverTarget?: string;
|
|
13
|
+
popoverTargetAction?: 'toggle' | 'show' | 'hide';
|
|
14
|
+
'aria-controls'?: string;
|
|
15
|
+
'aria-haspopup'?: 'dialog' | 'menu' | 'listbox' | 'tree' | 'grid' | 'true';
|
|
16
|
+
}>;
|
|
17
|
+
interface MenuHeaderBaseProps {
|
|
4
18
|
label: string;
|
|
5
19
|
action?: string;
|
|
6
20
|
actionLabel?: string;
|
|
@@ -9,7 +23,19 @@ interface MenuHeaderProps {
|
|
|
9
23
|
disabledReason?: string;
|
|
10
24
|
expanded?: boolean;
|
|
11
25
|
toggle?: boolean;
|
|
26
|
+
rootAttributes?: MenuHeaderRootAttributes;
|
|
27
|
+
triggerAttributes?: MenuHeaderTriggerAttributes;
|
|
12
28
|
}
|
|
13
|
-
|
|
29
|
+
type MenuHeaderIndicatorProps = {
|
|
30
|
+
count: number;
|
|
31
|
+
countLabel: string;
|
|
32
|
+
badge?: never;
|
|
33
|
+
} | {
|
|
34
|
+
count?: never;
|
|
35
|
+
countLabel?: never;
|
|
36
|
+
badge?: SafeHtml;
|
|
37
|
+
};
|
|
38
|
+
type MenuHeaderProps = MenuHeaderBaseProps & MenuHeaderIndicatorProps;
|
|
39
|
+
declare function MenuHeader({ label, count, countLabel, badge, action, actionLabel, actionIcon, actionDisabled, disabledReason, expanded, toggle, rootAttributes, triggerAttributes }: MenuHeaderProps): SafeHtml;
|
|
14
40
|
|
|
15
41
|
export { MenuHeader, type MenuHeaderProps };
|
package/dist/menu-header.js
CHANGED
package/dist/menu-item.d.ts
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
import { SafeHtml } from 'kerfjs';
|
|
2
2
|
|
|
3
|
+
type MenuItemRootAttributes = Readonly<Record<`data-${string}`, string | undefined> & {
|
|
4
|
+
'data-component'?: never;
|
|
5
|
+
'data-action'?: never;
|
|
6
|
+
'data-item-id'?: never;
|
|
7
|
+
'data-has-icon'?: never;
|
|
8
|
+
'data-multiline'?: never;
|
|
9
|
+
'data-state'?: never;
|
|
10
|
+
}>;
|
|
3
11
|
interface MenuItemProps {
|
|
4
12
|
label: string | SafeHtml;
|
|
5
13
|
icon?: SafeHtml;
|
|
@@ -16,7 +24,8 @@ interface MenuItemProps {
|
|
|
16
24
|
state?: string;
|
|
17
25
|
disabled?: boolean;
|
|
18
26
|
tabIndex?: number;
|
|
27
|
+
rootAttributes?: MenuItemRootAttributes;
|
|
19
28
|
}
|
|
20
|
-
declare function MenuItem({ label, icon, trailing, selected, action, itemId, className, style, pressed, accessibleLabel, title, multiline, state, disabled, tabIndex }: MenuItemProps): SafeHtml;
|
|
29
|
+
declare function MenuItem({ label, icon, trailing, selected, action, itemId, className, style, pressed, accessibleLabel, title, multiline, state, disabled, tabIndex, rootAttributes }: MenuItemProps): SafeHtml;
|
|
21
30
|
|
|
22
31
|
export { MenuItem, type MenuItemProps };
|
package/dist/menu-item.js
CHANGED
|
@@ -12,10 +12,12 @@ interface ResizableRegionProps {
|
|
|
12
12
|
edge?: ResizableRegionEdge;
|
|
13
13
|
collapsed?: boolean;
|
|
14
14
|
transitioning?: boolean;
|
|
15
|
+
/** Decorative dormant content for the separator handle. Must not contain interactive descendants. */
|
|
16
|
+
handleIcon?: SafeHtml;
|
|
15
17
|
children: SafeHtml | SafeHtml[];
|
|
16
18
|
}
|
|
17
19
|
declare const clampRegionSize: (size: number, min: number, max: number) => number;
|
|
18
20
|
declare const resizeRegionFromPointer: (startSize: number, delta: number, edge: ResizableRegionEdge) => number;
|
|
19
|
-
declare function ResizableRegion({ id, label, size, min, max, axis, edge, collapsed, transitioning, children }: ResizableRegionProps): SafeHtml;
|
|
21
|
+
declare function ResizableRegion({ id, label, size, min, max, axis, edge, collapsed, transitioning, handleIcon, children }: ResizableRegionProps): SafeHtml;
|
|
20
22
|
|
|
21
23
|
export { ResizableRegion, type ResizableRegionAxis, type ResizableRegionEdge, type ResizableRegionProps, clampRegionSize, resizeRegionFromPointer };
|
package/dist/resizable-region.js
CHANGED
package/dist/select.js
CHANGED
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
.kui-app-tab {
|
|
2
|
+
--kui-app-tab-color: var(--kui-color-neutral-on-quiet);
|
|
3
|
+
--kui-app-tab-hover-background: color-mix(
|
|
4
|
+
in srgb,
|
|
5
|
+
var(--kui-color-surface) 72%,
|
|
6
|
+
transparent
|
|
7
|
+
);
|
|
8
|
+
--kui-app-tab-selected-color: var(--kui-color-brand-on-quiet);
|
|
9
|
+
--kui-app-tab-selected-background: var(--kui-color-surface);
|
|
10
|
+
--kui-app-tab-selected-border: color-mix(
|
|
11
|
+
in srgb,
|
|
12
|
+
var(--kui-color-neutral-border-normal) 80%,
|
|
13
|
+
transparent
|
|
14
|
+
);
|
|
15
|
+
--kui-app-tab-drop-indicator: var(--kui-color-brand-border-normal);
|
|
16
|
+
position: relative;
|
|
17
|
+
display: flex;
|
|
18
|
+
width: max-content;
|
|
19
|
+
min-width: max-content;
|
|
20
|
+
height: 2.5rem;
|
|
21
|
+
box-sizing: border-box;
|
|
22
|
+
border: 1px solid transparent;
|
|
23
|
+
border-radius: var(--kui-layout-pill-radius, calc(1px + 1.3125rem));
|
|
24
|
+
color: var(--kui-app-tab-color);
|
|
25
|
+
background: transparent;
|
|
26
|
+
align-items: center;
|
|
27
|
+
flex: none;
|
|
28
|
+
}
|
|
29
|
+
.kui-app-tab:hover {
|
|
30
|
+
border-color: var(--kui-color-neutral-border-normal);
|
|
31
|
+
background: var(--kui-app-tab-hover-background);
|
|
32
|
+
}
|
|
33
|
+
.kui-app-tab[data-selected="true"] {
|
|
34
|
+
border-color: var(--kui-app-tab-selected-border);
|
|
35
|
+
color: var(--kui-app-tab-selected-color);
|
|
36
|
+
background: var(--kui-app-tab-selected-background);
|
|
37
|
+
box-shadow: var(--kui-shadow-s);
|
|
38
|
+
}
|
|
39
|
+
.kui-app-tab[data-tab-dragging="true"] {
|
|
40
|
+
opacity: 0.55;
|
|
41
|
+
}
|
|
42
|
+
.kui-app-tab[data-tab-drop-position]::after {
|
|
43
|
+
position: absolute;
|
|
44
|
+
z-index: 2;
|
|
45
|
+
top: 0.2rem;
|
|
46
|
+
bottom: 0.2rem;
|
|
47
|
+
width: 2px;
|
|
48
|
+
border-radius: var(--kui-radius-pill);
|
|
49
|
+
background: var(--kui-app-tab-drop-indicator);
|
|
50
|
+
content: "";
|
|
51
|
+
pointer-events: none;
|
|
52
|
+
}
|
|
53
|
+
.kui-app-tab[data-tab-drop-position="before"]::after {
|
|
54
|
+
inset-inline-start: calc(var(--kui-space-2xs) * -1);
|
|
55
|
+
}
|
|
56
|
+
.kui-app-tab[data-tab-drop-position="after"]::after {
|
|
57
|
+
inset-inline-end: calc(var(--kui-space-2xs) * -1);
|
|
58
|
+
}
|
|
59
|
+
.kui-app-tab__select {
|
|
60
|
+
display: flex;
|
|
61
|
+
min-width: 0;
|
|
62
|
+
height: 100%;
|
|
63
|
+
padding: 0 var(--kui-layout-item-padding, 0.5rem);
|
|
64
|
+
border: 0;
|
|
65
|
+
appearance: none;
|
|
66
|
+
color: inherit;
|
|
67
|
+
background: transparent;
|
|
68
|
+
cursor: pointer;
|
|
69
|
+
font: inherit;
|
|
70
|
+
align-items: center;
|
|
71
|
+
gap: var(--kui-layout-item-gap, 0.5rem);
|
|
72
|
+
text-align: start;
|
|
73
|
+
}
|
|
74
|
+
.kui-app-tab:has(.kui-app-tab__close) .kui-app-tab__select {
|
|
75
|
+
padding-inline-start: var(--kui-layout-item-padding, 0.5rem);
|
|
76
|
+
}
|
|
77
|
+
.kui-app-tab:has(.kui-app-tab__select:focus-visible) {
|
|
78
|
+
outline: var(--kui-focus-ring);
|
|
79
|
+
outline-offset: -2px;
|
|
80
|
+
}
|
|
81
|
+
.kui-app-tab__select:focus-visible {
|
|
82
|
+
outline: none;
|
|
83
|
+
}
|
|
84
|
+
.kui-app-tab__close:focus-visible {
|
|
85
|
+
border-radius: var(--kui-radius-pill);
|
|
86
|
+
outline: var(--kui-focus-ring);
|
|
87
|
+
outline-offset: -2px;
|
|
88
|
+
}
|
|
89
|
+
.kui-app-tab__select > svg {
|
|
90
|
+
width: 1rem;
|
|
91
|
+
height: 1rem;
|
|
92
|
+
flex: none;
|
|
93
|
+
}
|
|
94
|
+
.kui-app-tab__name {
|
|
95
|
+
overflow: hidden;
|
|
96
|
+
font-size: var(--kui-font-xs);
|
|
97
|
+
font-weight: 650;
|
|
98
|
+
text-overflow: ellipsis;
|
|
99
|
+
white-space: nowrap;
|
|
100
|
+
}
|
|
101
|
+
.kui-app-tab__trailing {
|
|
102
|
+
display: grid;
|
|
103
|
+
min-width: 1.275rem;
|
|
104
|
+
min-height: 1.275rem;
|
|
105
|
+
flex: none;
|
|
106
|
+
place-items: center;
|
|
107
|
+
}
|
|
108
|
+
.kui-app-tab__close {
|
|
109
|
+
display: grid;
|
|
110
|
+
width: 1.275rem;
|
|
111
|
+
height: 1.275rem;
|
|
112
|
+
margin-inline-start: var(--kui-space-xs);
|
|
113
|
+
padding: 0;
|
|
114
|
+
border: 0;
|
|
115
|
+
appearance: none;
|
|
116
|
+
color: var(--kui-color-neutral-on-quiet);
|
|
117
|
+
background: transparent;
|
|
118
|
+
cursor: pointer;
|
|
119
|
+
flex: none;
|
|
120
|
+
place-items: center;
|
|
121
|
+
}
|
|
122
|
+
.kui-app-tab__close:hover {
|
|
123
|
+
color: var(--kui-color-text);
|
|
124
|
+
}
|
|
125
|
+
.kui-app-tab__close-icon {
|
|
126
|
+
display: grid;
|
|
127
|
+
width: 0.6375rem;
|
|
128
|
+
height: 0.6375rem;
|
|
129
|
+
pointer-events: none;
|
|
130
|
+
place-items: center;
|
|
131
|
+
}
|
|
132
|
+
.kui-app-tab__close-icon > svg {
|
|
133
|
+
width: 100%;
|
|
134
|
+
height: 100%;
|
|
135
|
+
}
|
|
136
|
+
@media (hover: hover) and (pointer: fine) {
|
|
137
|
+
.kui-app-tab__close {
|
|
138
|
+
opacity: 0;
|
|
139
|
+
pointer-events: none;
|
|
140
|
+
transition: opacity 0.12s ease;
|
|
141
|
+
}
|
|
142
|
+
.kui-app-tab:hover .kui-app-tab__close,
|
|
143
|
+
.kui-app-tab:focus-within .kui-app-tab__close {
|
|
144
|
+
opacity: 1;
|
|
145
|
+
pointer-events: auto;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
@media (prefers-reduced-motion: reduce) {
|
|
149
|
+
.kui-app-tab__close {
|
|
150
|
+
transition: none;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
.kui-dialog-header {
|
|
2
|
+
--kui-dialog-header-border: transparent;
|
|
3
|
+
--kui-dialog-header-icon-background: var(--kui-color-brand-fill-quiet);
|
|
4
|
+
--kui-dialog-header-icon-foreground: var(--kui-color-brand-on-quiet);
|
|
5
|
+
--kui-dialog-header-title-inset: 2px;
|
|
6
|
+
display: grid;
|
|
7
|
+
min-height: 2.75rem;
|
|
8
|
+
margin-inline: var(--kui-layout-inline-margin, 0.5rem);
|
|
9
|
+
padding: var(--kui-layout-item-padding, 0.5rem);
|
|
10
|
+
box-sizing: border-box;
|
|
11
|
+
border: 1px solid var(--kui-dialog-header-border);
|
|
12
|
+
border-radius: var(--kui-layout-rounded-radius, calc(1px + 0.6875rem));
|
|
13
|
+
gap: 0;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.kui-dialog-header[data-has-icon="true"] {
|
|
17
|
+
--kui-dialog-header-title-inset: calc(
|
|
18
|
+
2px + 2.125rem + var(--kui-layout-item-gap, 0.5rem)
|
|
19
|
+
);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.kui-dialog-header__toolbar {
|
|
23
|
+
min-height: var(--kui-toolbar-group-size, calc(2px + 2.625rem));
|
|
24
|
+
padding: 0;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.kui-dialog-header__identity {
|
|
28
|
+
max-width: 100%;
|
|
29
|
+
border-color: transparent;
|
|
30
|
+
background: transparent;
|
|
31
|
+
gap: var(--kui-layout-item-gap, 0.5rem);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.kui-dialog-header__icon {
|
|
35
|
+
display: grid;
|
|
36
|
+
width: 2.125rem;
|
|
37
|
+
height: 2.125rem;
|
|
38
|
+
border-radius: var(--kui-radius-circle);
|
|
39
|
+
color: var(--kui-dialog-header-icon-foreground);
|
|
40
|
+
background: var(--kui-dialog-header-icon-background);
|
|
41
|
+
flex: none;
|
|
42
|
+
place-items: center;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
.kui-dialog-header__icon svg {
|
|
46
|
+
width: 1.5rem;
|
|
47
|
+
height: 1.5rem;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
.kui-dialog-header__copy {
|
|
51
|
+
min-width: 0;
|
|
52
|
+
overflow: hidden;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.kui-dialog-header h2,
|
|
56
|
+
.kui-dialog-header__summary {
|
|
57
|
+
margin: 0;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.kui-dialog-header h2 {
|
|
61
|
+
overflow: hidden;
|
|
62
|
+
color: var(--kui-color-text);
|
|
63
|
+
font-size: var(--kui-font-l);
|
|
64
|
+
line-height: 1.2;
|
|
65
|
+
text-overflow: ellipsis;
|
|
66
|
+
white-space: nowrap;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.kui-dialog-header__summary {
|
|
70
|
+
min-width: 0;
|
|
71
|
+
margin-block-start: calc(-1 * var(--kui-layout-item-padding, 0.5rem));
|
|
72
|
+
padding-inline: var(--kui-layout-item-padding, 0.5rem);
|
|
73
|
+
padding-inline-start: var(--kui-dialog-header-title-inset);
|
|
74
|
+
color: var(--kui-color-text-quiet);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
.kui-dialog-header__actions {
|
|
78
|
+
gap: 0;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.kui-dialog-header__actions:has(> .kui-toolbar-control-group) {
|
|
82
|
+
height: var(--kui-toolbar-group-size, calc(2px + 2.625rem));
|
|
83
|
+
padding: 0;
|
|
84
|
+
border-color: transparent;
|
|
85
|
+
background: transparent;
|
|
86
|
+
gap: var(--kui-layout-item-gap, 0.5rem);
|
|
87
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
.kui-disclosure-arrow {
|
|
2
|
+
display: inline-flex;
|
|
3
|
+
width: var(--kui-disclosure-arrow-size, 1.125rem);
|
|
4
|
+
height: var(--kui-disclosure-arrow-size, 1.125rem);
|
|
5
|
+
flex: none;
|
|
6
|
+
align-items: center;
|
|
7
|
+
justify-content: center;
|
|
8
|
+
transform: rotate(var(--_kui-disclosure-arrow-rotation, 0deg));
|
|
9
|
+
transform-origin: center;
|
|
10
|
+
transition: transform var(--kui-disclosure-arrow-duration, 0.2s) ease;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.kui-disclosure-arrow svg {
|
|
14
|
+
display: block;
|
|
15
|
+
width: 100%;
|
|
16
|
+
height: 100%;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
@media (prefers-reduced-motion: reduce) {
|
|
20
|
+
.kui-disclosure-arrow {
|
|
21
|
+
transition-duration: 0s;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
.kui-empty-state {
|
|
2
|
+
--kui-empty-state-foreground: var(--kui-color-neutral-on-quiet);
|
|
3
|
+
--kui-empty-state-title: var(--kui-color-text);
|
|
4
|
+
display: grid;
|
|
5
|
+
width: min(
|
|
6
|
+
calc(100% - (2 * var(--kui-layout-inline-margin, 0.5rem))),
|
|
7
|
+
28rem
|
|
8
|
+
);
|
|
9
|
+
min-height: 12rem;
|
|
10
|
+
margin: auto;
|
|
11
|
+
padding: var(--kui-space-xl);
|
|
12
|
+
box-sizing: border-box;
|
|
13
|
+
border: 1px solid var(--kui-empty-state-border, transparent);
|
|
14
|
+
border-radius: var(--kui-layout-rounded-radius, calc(1px + 0.6875rem));
|
|
15
|
+
color: var(--kui-empty-state-foreground);
|
|
16
|
+
background: var(--kui-empty-state-background, transparent);
|
|
17
|
+
place-items: center;
|
|
18
|
+
place-content: center;
|
|
19
|
+
gap: var(--kui-layout-item-gap, 0.5rem);
|
|
20
|
+
text-align: center;
|
|
21
|
+
}
|
|
22
|
+
.kui-empty-state__icon {
|
|
23
|
+
display: grid;
|
|
24
|
+
min-width: 2rem;
|
|
25
|
+
min-height: 2rem;
|
|
26
|
+
margin-block-end: var(--kui-space-xs);
|
|
27
|
+
color: inherit;
|
|
28
|
+
place-items: center;
|
|
29
|
+
}
|
|
30
|
+
.kui-empty-state__icon svg {
|
|
31
|
+
width: 2rem;
|
|
32
|
+
height: 2rem;
|
|
33
|
+
stroke-width: 1.5;
|
|
34
|
+
}
|
|
35
|
+
.kui-empty-state strong {
|
|
36
|
+
color: var(--kui-empty-state-title);
|
|
37
|
+
font-size: var(--kui-font-l);
|
|
38
|
+
font-weight: 650;
|
|
39
|
+
}
|
|
40
|
+
.kui-empty-state > span {
|
|
41
|
+
max-width: 24rem;
|
|
42
|
+
font-size: var(--kui-font-s);
|
|
43
|
+
line-height: 1.45;
|
|
44
|
+
}
|
|
45
|
+
.kui-empty-state__action {
|
|
46
|
+
margin-block-start: var(--kui-space-xs);
|
|
47
|
+
}
|