@digitalwalletcorp/vue-core 1.1.0 → 1.2.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 (67) hide show
  1. package/README.md +20 -9
  2. package/lib/accordion-fieldset.cjs +1 -1
  3. package/lib/accordion-fieldset.d.cts +25 -0
  4. package/lib/accordion-fieldset.js +1 -1
  5. package/lib/{accordion-fieldset.vue_vue_type_style_index_0_lang-tzJhLHyT.js → accordion-fieldset.vue_vue_type_style_index_0_lang-Cf4czDXz.js} +11 -11
  6. package/lib/accordion-fieldset.vue_vue_type_style_index_0_lang-DoM5QjpJ.cjs +1 -0
  7. package/lib/accordion-section.cjs +1 -1
  8. package/lib/accordion-section.d.cts +34 -0
  9. package/lib/accordion-section.js +1 -1
  10. package/lib/{accordion-section.vue_vue_type_style_index_0_lang-BBEywIH3.cjs → accordion-section.vue_vue_type_style_index_0_lang-CFDdUEnn.cjs} +1 -1
  11. package/lib/{accordion-section.vue_vue_type_style_index_0_lang-DAlUN0wH.js → accordion-section.vue_vue_type_style_index_0_lang-Gvjjx02P.js} +1 -1
  12. package/lib/components-C63HJoCn.cjs +1 -0
  13. package/lib/{components-xNQBXMzx.js → components-q4Cf97bO.js} +7 -7
  14. package/lib/components.d.cts +9 -0
  15. package/lib/global.d.cts +7 -0
  16. package/lib/hourglass-loading.d.cts +23 -0
  17. package/lib/index.cjs +1 -1
  18. package/lib/index.d.cts +3 -0
  19. package/lib/index.js +7 -7
  20. package/lib/internal/tab-group-context.d.cts +16 -0
  21. package/lib/internal/use-shrinkable.d.cts +12 -0
  22. package/lib/label-button.cjs +1 -1
  23. package/lib/label-button.d.cts +30 -0
  24. package/lib/label-button.js +1 -1
  25. package/lib/label-button.vue_vue_type_style_index_0_lang-D7ZgfZOL.cjs +1 -0
  26. package/lib/{label-button.vue_vue_type_script_setup_true_lang-CoHrTUSs.js → label-button.vue_vue_type_style_index_0_lang-DqRYddVt.js} +12 -12
  27. package/lib/label-icon.cjs +1 -1
  28. package/lib/label-icon.d.cts +30 -0
  29. package/lib/label-icon.js +1 -1
  30. package/lib/{label-icon.vue_vue_type_style_index_0_lang-C2URq6GP.cjs → label-icon.vue_vue_type_style_index_0_lang-D9Cimu20.cjs} +1 -1
  31. package/lib/{label-icon.vue_vue_type_style_index_0_lang-bQFkQ_gC.js → label-icon.vue_vue_type_style_index_0_lang-me52HE2V.js} +1 -1
  32. package/lib/nuxt.cjs +1 -1
  33. package/lib/nuxt.d.cts +10 -0
  34. package/lib/nuxt.js +1 -1
  35. package/lib/page-section.cjs +1 -1
  36. package/lib/page-section.d.cts +34 -0
  37. package/lib/page-section.js +1 -1
  38. package/lib/{page-section.vue_vue_type_style_index_0_lang-bvQeBjUP.cjs → page-section.vue_vue_type_style_index_0_lang-DEAkTLxd.cjs} +1 -1
  39. package/lib/{page-section.vue_vue_type_style_index_0_lang-4MLb_sDZ.js → page-section.vue_vue_type_style_index_0_lang-DpVQe_rV.js} +1 -1
  40. package/lib/page-title.cjs +1 -1
  41. package/lib/page-title.d.cts +20 -0
  42. package/lib/page-title.js +1 -1
  43. package/lib/{page-title.vue_vue_type_style_index_0_lang-DcmGICoo.cjs → page-title.vue_vue_type_style_index_0_lang-BqIsIks5.cjs} +1 -1
  44. package/lib/{page-title.vue_vue_type_style_index_0_lang-CzfdMzXf.js → page-title.vue_vue_type_style_index_0_lang-ChZot85K.js} +1 -1
  45. package/lib/register.cjs +1 -1
  46. package/lib/register.d.cts +9 -0
  47. package/lib/register.js +1 -1
  48. package/lib/style.css +1 -1
  49. package/lib/tab-content.d.cts +39 -0
  50. package/lib/tab-group.cjs +1 -1
  51. package/lib/tab-group.d.cts +44 -0
  52. package/lib/tab-group.js +1 -1
  53. package/lib/{tab-group.vue_vue_type_style_index_0_lang-CjnBkvvZ.js → tab-group.vue_vue_type_style_index_0_lang-C84mDEOC.js} +1 -1
  54. package/lib/{tab-group.vue_vue_type_style_index_0_lang-CwVGYZAo.cjs → tab-group.vue_vue_type_style_index_0_lang-CMaufRJV.cjs} +1 -1
  55. package/lib/types/label-preset.d.cts +12 -0
  56. package/package.json +28 -12
  57. package/src/accordion-fieldset.vue +7 -2
  58. package/src/accordion-section.vue +11 -1
  59. package/src/label-button.vue +32 -1
  60. package/src/label-icon.vue +2 -2
  61. package/src/page-section.vue +2 -2
  62. package/src/page-title.vue +5 -5
  63. package/src/tab-content.vue +7 -7
  64. package/src/tab-group.vue +27 -16
  65. package/lib/accordion-fieldset.vue_vue_type_style_index_0_lang-Dd8HXuVm.cjs +0 -1
  66. package/lib/components-YAonMRcW.cjs +0 -1
  67. package/lib/label-button.vue_vue_type_script_setup_true_lang-DqhdCgmJ.cjs +0 -1
@@ -1 +1 @@
1
- "use strict";const e=require("vue"),n=require("@digitalwalletcorp/vue-svg-icons"),r=require("./label-icon.vue_vue_type_style_index_0_lang-C2URq6GP.cjs"),a={class:"dwui-page-section"},i={class:"dwui-page-section-content"},p=e.defineComponent({__name:"page-section",props:{title:{},icon:{default:"diamond"},iconVariant:{},iconColor:{},titleClass:{type:[Boolean,null,String,Object,Array]},titleStyle:{type:[Boolean,null,String,Object,Array]}},setup(l){const o=l,s={diamond:{component:n.SvgDiamond,shape:!0,color:"#1a44b6"},circle:{component:n.SvgCircle,shape:!0,color:"#e78b2f"},square:{component:n.SvgSquare,shape:!0,color:"#d13a2b"},pushpin:{component:n.SvgPushpin,shape:!1},"round-pushpin":{component:n.SvgRoundPushpin,shape:!1}},c=e.computed(()=>{const t=s[o.icon];return{component:t.component,props:t.shape?{variant:o.iconVariant,color:o.iconColor??t.color}:{}}});return(t,u)=>(e.openBlock(),e.createElementBlock("section",a,[o.title!=null?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["dwui-page-section-title",o.titleClass]),style:e.normalizeStyle(o.titleStyle)},[e.createVNode(r._sfc_main,null,{icon:e.withCtx(()=>[e.renderSlot(t.$slots,"icon",{},()=>[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(c.value.component),e.normalizeProps(e.guardReactiveProps(c.value.props)),null,16))])]),default:e.withCtx(()=>[e.createTextVNode(" "+e.toDisplayString(o.title),1)]),_:3})],6)):e.createCommentVNode("",!0),e.createElementVNode("div",i,[e.renderSlot(t.$slots,"default")])]))}});exports._sfc_main=p;
1
+ "use strict";const e=require("vue"),n=require("@digitalwalletcorp/vue-svg-icons"),r=require("./label-icon.vue_vue_type_style_index_0_lang-D9Cimu20.cjs"),a={class:"dwui-page-section"},i={class:"dwui-page-section-content"},p=e.defineComponent({__name:"page-section",props:{title:{},icon:{default:"diamond"},iconVariant:{},iconColor:{},titleClass:{type:[Boolean,null,String,Object,Array]},titleStyle:{type:[Boolean,null,String,Object,Array]}},setup(l){const o=l,s={diamond:{component:n.SvgDiamond,shape:!0,color:"#1a44b6"},circle:{component:n.SvgCircle,shape:!0,color:"#e78b2f"},square:{component:n.SvgSquare,shape:!0,color:"#d13a2b"},pushpin:{component:n.SvgPushpin,shape:!1},"round-pushpin":{component:n.SvgRoundPushpin,shape:!1}},c=e.computed(()=>{const t=s[o.icon];return{component:t.component,props:t.shape?{variant:o.iconVariant,color:o.iconColor??t.color}:{}}});return(t,u)=>(e.openBlock(),e.createElementBlock("section",a,[o.title!=null?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["dwui-page-section-title",o.titleClass]),style:e.normalizeStyle(o.titleStyle)},[e.createVNode(r._sfc_main,null,{icon:e.withCtx(()=>[e.renderSlot(t.$slots,"icon",{},()=>[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(c.value.component),e.normalizeProps(e.guardReactiveProps(c.value.props)),null,16))])]),default:e.withCtx(()=>[e.createTextVNode(" "+e.toDisplayString(o.title),1)]),_:3})],6)):e.createCommentVNode("",!0),e.createElementVNode("div",i,[e.renderSlot(t.$slots,"default")])]))}});exports._sfc_main=p;
@@ -1,6 +1,6 @@
1
1
  import { defineComponent as i, computed as p, openBlock as t, createElementBlock as r, normalizeStyle as m, normalizeClass as u, createVNode as d, withCtx as a, createTextVNode as S, toDisplayString as h, renderSlot as l, createBlock as _, resolveDynamicComponent as g, normalizeProps as f, guardReactiveProps as v, createCommentVNode as y, createElementVNode as C } from "vue";
2
2
  import { SvgRoundPushpin as V, SvgPushpin as b, SvgSquare as B, SvgCircle as N, SvgDiamond as P } from "@digitalwalletcorp/vue-svg-icons";
3
- import { _ as k } from "./label-icon.vue_vue_type_style_index_0_lang-bQFkQ_gC.js";
3
+ import { _ as k } from "./label-icon.vue_vue_type_style_index_0_lang-me52HE2V.js";
4
4
  const w = { class: "dwui-page-section" }, E = { class: "dwui-page-section-content" }, $ = /* @__PURE__ */ i({
5
5
  __name: "page-section",
6
6
  props: {
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./page-title.vue_vue_type_style_index_0_lang-DcmGICoo.cjs");exports.default=e._sfc_main;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./page-title.vue_vue_type_style_index_0_lang-BqIsIks5.cjs");exports.default=e._sfc_main;
@@ -0,0 +1,20 @@
1
+ interface Props {
2
+ /** タイトルの文字 */
3
+ title: string;
4
+ }
5
+ interface Slots {
6
+ /** タイトルの文字の前に表示するアイコン */
7
+ icon?(): unknown;
8
+ /** タイトルバーの右側に表示する内容 */
9
+ default?(): unknown;
10
+ }
11
+ type __VLS_Slots = Slots;
12
+ declare const __VLS_base: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
13
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
14
+ declare const _default: typeof __VLS_export;
15
+ export default _default;
16
+ type __VLS_WithSlots<T, S> = T & {
17
+ new (): {
18
+ $slots: S;
19
+ };
20
+ };
package/lib/page-title.js CHANGED
@@ -1,4 +1,4 @@
1
- import { _ as f } from "./page-title.vue_vue_type_style_index_0_lang-CzfdMzXf.js";
1
+ import { _ as f } from "./page-title.vue_vue_type_style_index_0_lang-ChZot85K.js";
2
2
  export {
3
3
  f as default
4
4
  };
@@ -1 +1 @@
1
- "use strict";const e=require("vue"),l=require("./label-icon.vue_vue_type_style_index_0_lang-C2URq6GP.cjs"),c={class:"dwui-page-title"},i={key:0,class:"dwui-page-title-actions"},a=e.defineComponent({__name:"page-title",props:{title:{}},setup(n){const s=n,t=e.useSlots();return(o,r)=>(e.openBlock(),e.createElementBlock("section",c,[e.createVNode(l._sfc_main,{class:"dwui-page-title-label"},e.createSlots({default:e.withCtx(()=>[e.createTextVNode(" "+e.toDisplayString(s.title),1)]),_:2},[t.icon!=null?{name:"icon",fn:e.withCtx(()=>[e.renderSlot(o.$slots,"icon")]),key:"0"}:void 0]),1024),t.default!=null?(e.openBlock(),e.createElementBlock("span",i,[e.renderSlot(o.$slots,"default")])):e.createCommentVNode("",!0)]))}});exports._sfc_main=a;
1
+ "use strict";const e=require("vue"),l=require("./label-icon.vue_vue_type_style_index_0_lang-D9Cimu20.cjs"),c={class:"dwui-page-title"},i={key:0,class:"dwui-page-title-actions"},a=e.defineComponent({__name:"page-title",props:{title:{}},setup(n){const s=n,t=e.useSlots();return(o,r)=>(e.openBlock(),e.createElementBlock("section",c,[e.createVNode(l._sfc_main,{class:"dwui-page-title-label"},e.createSlots({default:e.withCtx(()=>[e.createTextVNode(" "+e.toDisplayString(s.title),1)]),_:2},[t.icon!=null?{name:"icon",fn:e.withCtx(()=>[e.renderSlot(o.$slots,"icon")]),key:"0"}:void 0]),1024),t.default!=null?(e.openBlock(),e.createElementBlock("span",i,[e.renderSlot(o.$slots,"default")])):e.createCommentVNode("",!0)]))}});exports._sfc_main=a;
@@ -1,5 +1,5 @@
1
1
  import { defineComponent as c, useSlots as r, openBlock as o, createElementBlock as s, createVNode as p, createSlots as d, withCtx as l, createTextVNode as u, toDisplayString as _, renderSlot as n, createCommentVNode as m } from "vue";
2
- import { _ as f } from "./label-icon.vue_vue_type_style_index_0_lang-bQFkQ_gC.js";
2
+ import { _ as f } from "./label-icon.vue_vue_type_style_index_0_lang-me52HE2V.js";
3
3
  const g = { class: "dwui-page-title" }, h = {
4
4
  key: 0,
5
5
  class: "dwui-page-title-actions"
package/lib/register.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./components-YAonMRcW.cjs");function r(e){for(const[o,n]of Object.entries(t.components))e.component(o,n)}exports.registerComponents=r;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./components-C63HJoCn.cjs");function r(e){for(const[o,n]of Object.entries(t.components))e.component(o,n)}exports.registerComponents=r;
@@ -0,0 +1,9 @@
1
+ import { App } from 'vue';
2
+ import * as components from './components.cjs';
3
+ type VueCoreComponents = typeof components;
4
+ declare module 'vue' {
5
+ interface GlobalComponents extends VueCoreComponents {
6
+ }
7
+ }
8
+ export declare function registerComponents(app: App): void;
9
+ export {};
package/lib/register.js CHANGED
@@ -1,4 +1,4 @@
1
- import { c as t } from "./components-xNQBXMzx.js";
1
+ import { c as t } from "./components-q4Cf97bO.js";
2
2
  function m(o) {
3
3
  for (const [n, e] of Object.entries(t))
4
4
  o.component(n, e);
package/lib/style.css CHANGED
@@ -1 +1 @@
1
- :where(.dwui-label-icon){display:inline-block}:where(.dwui-label-icon>.dwui-label){display:inline-block}:where(.dwui-label-icon>.dwui-label:not(:first-child)){margin-left:var(--dwui-label-icon-gap, .25em)}:where(.dwui-accordion-fieldset){position:relative}:where(.dwui-accordion-toggle){display:inline-flex;align-items:center;gap:4px;margin-left:4px;padding:0;border:none;background:none;color:inherit;cursor:pointer}:where(.dwui-accordion-toggle:disabled){opacity:.6;cursor:not-allowed}:where(.dwui-accordion-contents){position:relative;width:fit-content;padding:2px;overflow:hidden;opacity:1}:where(.dwui-accordion-contents.dwui-expanded){transition:all .3s linear}:where(.dwui-accordion-contents.dwui-shrunk){height:auto;max-height:70px;opacity:.75;transition:all .3s linear}:where(.dwui-accordion-section){position:relative}:where(.dwui-accordion-section-contents){position:relative;width:fit-content;overflow:hidden}:where(.dwui-accordion-section-contents.dwui-expanded){transition:all .3s linear}:where(.dwui-accordion-section-contents.dwui-shrunk){height:auto;max-height:70px;transition:all .3s linear}:where(.dwui-accordion-section-contents.dwui-shrunk:not(.dwui-no-gradient)):after{content:"";position:absolute;inset:0;background-image:linear-gradient(180deg,transparent 0%,transparent 60%,var(--dwui-accordion-section-fade, Canvas) 100%);pointer-events:none}:where(.dwui-accordion-section-control){position:relative;display:flex;justify-content:center;width:100%}:where(.dwui-accordion-section-toggle){display:inline-flex;align-items:center;cursor:pointer}:where(.dwui-accordion-section-toggle:disabled){opacity:.6;cursor:not-allowed}:where(.dwui-accordion-section-toggle[aria-expanded=true]){margin-top:8px}:where(.dwui-accordion-section-toggle[aria-expanded=false]){margin-top:-10px}:where(.dwui-hourglass-loading){animation:dwui-hourglass-loading-spin 1.2s linear infinite}@keyframes dwui-hourglass-loading-spin{to{transform:rotate(360deg)}}:where(.dwui-page-section){display:block;margin:4px 0 8px;padding-top:2px;font-size:var(--dwui-page-section-font-size, 12px);font-weight:500}:where(.dwui-page-section-title){display:flex;align-items:center;font-size:var(--dwui-page-section-title-font-size, 14px)}:where(.dwui-page-section-content){margin:8px 0 8px 16px}:where(.dwui-page-title){display:flex;align-items:center;justify-content:space-between;width:var(--dwui-page-title-width, auto);padding:4px;border-radius:4px;background:var(--dwui-page-title-bg, linear-gradient(#323232 0%, rgb(32, 32, 31) 25%, rgb(32, 32, 31) 75%, #323232 100%));color:var(--dwui-page-title-text, rgb(220, 220, 220));font-size:var(--dwui-page-title-font-size, 14px);font-weight:var(--dwui-page-title-font-weight, normal)}:where(.dwui-tab-content[aria-checked=false]){display:none}:where(.dwui-tab-content[aria-checked=true]){display:block;position:relative;padding:4px 8px;overflow:hidden;animation:dwui-tab-slide-in var(--dwui-tab-slide-duration, .35s) var(--dwui-tab-slide-easing, cubic-bezier(.22, 1, .36, 1))}:where(.dwui-tab-loading){position:absolute;inset:0;z-index:1;display:flex;align-items:center;justify-content:center;background:var(--dwui-loading-overlay, rgba(0, 0, 0, .25))}:where(.dwui-tab-loading-spinner){width:var(--dwui-loading-spinner-size, 40px);height:var(--dwui-loading-spinner-size, 40px);border:4px solid var(--dwui-loading-spinner-track, rgba(255, 255, 255, .4));border-top-color:var(--dwui-loading-spinner-color, #ffffff);border-radius:50%;animation:dwui-tab-loading-spin .8s linear infinite}@keyframes dwui-tab-loading-spin{to{transform:rotate(360deg)}}@keyframes dwui-tab-slide-in{0%{opacity:0;transform:translate(var(--dwui-tab-slide-distance, -128px))}to{opacity:1;transform:translate(0)}}:where(.dwui-tab-group){margin-bottom:8px}:where(.dwui-tab-headers){display:flex;flex-direction:row;flex-wrap:wrap;margin-top:5px;padding-bottom:4px}:where(.dwui-tab-radio){display:none}:where(.dwui-tab-item){display:block;min-width:100px;padding:0 4px;border:1px solid var(--dwui-tab-border, #565656);border-bottom:1px solid var(--dwui-tab-header-accent, #5ab4bd);background:var(--dwui-tab-header-bg, linear-gradient(#1313c7, navy));line-height:2em;text-align:center;white-space:nowrap;color:var(--dwui-tab-header-text, azure);text-overflow:ellipsis;cursor:pointer;transition:all .2s ease}:where(.dwui-tab-radio:checked+.dwui-tab-item){background:var(--dwui-tab-header-selected-bg, linear-gradient(#1313c7, rgb(149, 149, 234), #1313c7));color:var(--dwui-tab-header-selected-text, azure);cursor:default}:where(.dwui-tab-radio:disabled+.dwui-tab-item){background:var(--dwui-tab-header-disabled-bg, gray);cursor:not-allowed}:where(.dwui-tab-item.dwui-tab-warn){background:var(--dwui-tab-header-warn-bg, #efef13);color:var(--dwui-tab-header-warn-text, midnightblue)}:where(.dwui-tab-radio:checked+.dwui-tab-item.dwui-tab-warn){background:var(--dwui-tab-header-warn-selected-bg, linear-gradient(#fafa06, rgb(232, 238, 206), #fafa06))}:where(.dwui-tab-item.dwui-tab-error){background:var(--dwui-tab-header-error-bg, red);color:var(--dwui-tab-header-error-text, azure)}:where(.dwui-tab-radio:checked+.dwui-tab-item.dwui-tab-error){background:var(--dwui-tab-header-error-selected-bg, linear-gradient(#ff0000, rgb(240, 136, 136), #ff0000))}:where(.dwui-tab-radio:not(:checked)+.dwui-tab-item:hover){box-shadow:inset 0 0 0 999px var(--dwui-tab-header-hover-overlay, rgba(255, 255, 255, .35))}:where(.dwui-tab-items){height:100%;border:1px solid var(--dwui-tab-border, #565656);overflow:hidden}
1
+ :where(.dwui-label-icon){display:inline-block}:where(.dwui-label-icon>.dwui-label){display:inline-block}:where(.dwui-label-icon>.dwui-label:not(:first-child)){margin-left:var(--dwui-gap-label-icon, .25em)}:where(.dwui-accordion-fieldset){position:relative}:where(.dwui-accordion-toggle){display:inline-flex;align-items:center;gap:4px;margin-left:4px;padding:0;border:none;background:none;color:inherit;cursor:pointer}:where(.dwui-accordion-toggle:disabled){opacity:.6;cursor:not-allowed}:where(.dwui-accordion-toggle:focus-visible){outline:var(--dwui-width-focus-ring, 2px) solid var(--dwui-outline-color-focus-ring, Highlight);outline-offset:var(--dwui-offset-focus-ring, 2px)}:where(.dwui-accordion-contents){position:relative;width:fit-content;padding:2px;overflow:hidden;opacity:1}:where(.dwui-accordion-contents.dwui-expanded){transition:all .3s linear}:where(.dwui-accordion-contents.dwui-shrunk){height:auto;max-height:70px;opacity:.75;transition:all .3s linear}:where(.dwui-accordion-section){position:relative}:where(.dwui-accordion-section-contents){position:relative;width:fit-content;overflow:hidden}:where(.dwui-accordion-section-contents.dwui-expanded){transition:all .3s linear}:where(.dwui-accordion-section-contents.dwui-shrunk){height:auto;max-height:70px;transition:all .3s linear}:where(.dwui-accordion-section-contents.dwui-shrunk:not(.dwui-no-gradient)):after{content:"";position:absolute;inset:0;background-image:linear-gradient(180deg,transparent 0%,transparent 60%,var(--dwui-color-accordion-section-fade, Canvas) 100%);pointer-events:none}:where(.dwui-accordion-section-control){position:relative;display:flex;justify-content:center;width:100%}:where(.dwui-accordion-section-toggle){display:inline-flex;align-items:center;padding:0;border:none;background:none;color:inherit;cursor:pointer}:where(.dwui-accordion-section-toggle:disabled){opacity:.6;cursor:not-allowed}:where(.dwui-accordion-section-toggle:focus-visible){outline:var(--dwui-width-focus-ring, 2px) solid var(--dwui-outline-color-focus-ring, Highlight);outline-offset:var(--dwui-offset-focus-ring, 2px)}:where(.dwui-accordion-section-toggle[aria-expanded=true]){margin-top:8px}:where(.dwui-accordion-section-toggle[aria-expanded=false]){margin-top:-10px}:where(.dwui-hourglass-loading){animation:dwui-hourglass-loading-spin 1.2s linear infinite}@keyframes dwui-hourglass-loading-spin{to{transform:rotate(360deg)}}:where(.dwui-label-button){display:inline-block;padding:2px 6px;border:1px solid var(--dwui-border-color-label-button, light-dark(#8f8f8f, #6b6f76));border-radius:3px;background:var(--dwui-background-label-button, light-dark(#f4f4f4, #3a3c40));color:var(--dwui-color-text-label-button, light-dark(#1a1a1a, #e6e6e6));font:inherit;cursor:pointer}:where(.dwui-label-button:not(:disabled):hover){background:var(--dwui-background-label-button-hover, light-dark(#e6e6e6, #474a50))}:where(.dwui-label-button:not(:disabled):active){background:var(--dwui-background-label-button-active, light-dark(#d6d6d6, #2f3135))}:where(.dwui-label-button:disabled){opacity:.6;cursor:not-allowed}:where(.dwui-label-button:focus-visible){outline:var(--dwui-width-focus-ring, 2px) solid var(--dwui-outline-color-focus-ring, Highlight);outline-offset:var(--dwui-offset-focus-ring, 2px)}:where(.dwui-page-section){display:block;margin:4px 0 8px;padding-top:2px;font-size:var(--dwui-font-size-page-section, 12px);font-weight:500}:where(.dwui-page-section-title){display:flex;align-items:center;font-size:var(--dwui-font-size-page-section-title, 14px)}:where(.dwui-page-section-content){margin:8px 0 8px 16px}:where(.dwui-page-title){display:flex;align-items:center;justify-content:space-between;width:var(--dwui-width-page-title, auto);padding:4px;border-radius:4px;background:var(--dwui-background-page-title, linear-gradient(light-dark(#323232, #3c3f45) 0%, light-dark(rgb(32, 32, 31), #2b2d31) 25%, light-dark(rgb(32, 32, 31), #2b2d31) 75%, light-dark(#323232, #3c3f45) 100%));color:var(--dwui-color-text-page-title, rgb(220, 220, 220));font-size:var(--dwui-font-size-page-title, 14px);font-weight:var(--dwui-font-weight-page-title, normal)}:where(.dwui-tab-content[aria-checked=false]){display:none}:where(.dwui-tab-content[aria-checked=true]){display:block;position:relative;padding:4px 8px;overflow:hidden;animation:dwui-tab-slide-in var(--dwui-duration-tab-slide, .35s) var(--dwui-easing-tab-slide, cubic-bezier(.22, 1, .36, 1))}:where(.dwui-tab-loading){position:absolute;inset:0;z-index:1;display:flex;align-items:center;justify-content:center;background:var(--dwui-overlay-color-loading, light-dark(rgba(0, 0, 0, .25), rgba(0, 0, 0, .45)))}:where(.dwui-tab-loading-spinner){width:var(--dwui-size-loading-spinner, 40px);height:var(--dwui-size-loading-spinner, 40px);border:4px solid var(--dwui-border-color-loading-spinner-track, rgba(255, 255, 255, .4));border-top-color:var(--dwui-border-color-loading-spinner, #ffffff);border-radius:50%;animation:dwui-tab-loading-spin .8s linear infinite}@keyframes dwui-tab-loading-spin{to{transform:rotate(360deg)}}@keyframes dwui-tab-slide-in{0%{opacity:0;transform:translate(var(--dwui-distance-tab-slide, -128px))}to{opacity:1;transform:translate(0)}}:where(.dwui-tab-group){margin-bottom:8px}:where(.dwui-tab-headers){display:flex;flex-direction:row;flex-wrap:wrap;position:relative;margin-top:5px;padding-bottom:4px}:where(.dwui-tab-radio){position:absolute;width:1px;height:1px;margin:0;opacity:0;pointer-events:none}:where(.dwui-tab-item){display:block;min-width:100px;padding:0 4px;border:1px solid var(--dwui-border-color-tab, light-dark(#565656, #8a8a8a));border-bottom:1px solid var(--dwui-border-color-tab-header-accent, #5ab4bd);background:var(--dwui-background-tab-header, linear-gradient(light-dark(#1313c7, #2a3a8f), light-dark(navy, #141c4d)));line-height:2em;text-align:center;white-space:nowrap;color:var(--dwui-color-text-tab-header, azure);text-overflow:ellipsis;cursor:pointer;transition:all .2s ease}:where(.dwui-tab-radio:checked+.dwui-tab-item){background:var(--dwui-background-tab-header-selected, linear-gradient(light-dark(#1313c7, #2a3a8f), light-dark(rgb(149, 149, 234), #5a62b8), light-dark(#1313c7, #2a3a8f)));color:var(--dwui-color-text-tab-header-selected, azure);cursor:default}:where(.dwui-tab-radio:disabled+.dwui-tab-item){background:var(--dwui-background-tab-header-disabled, light-dark(gray, #4a4a4a));cursor:not-allowed}:where(.dwui-tab-item.dwui-tab-warn){background:var(--dwui-background-tab-header-warn, light-dark(#efef13, #8a8a10));color:var(--dwui-color-text-tab-header-warn, light-dark(midnightblue, #fffbd0))}:where(.dwui-tab-radio:checked+.dwui-tab-item.dwui-tab-warn){background:var(--dwui-background-tab-header-warn-selected, linear-gradient(light-dark(#fafa06, #8a8a10), light-dark(rgb(232, 238, 206), #a8a860), light-dark(#fafa06, #8a8a10)))}:where(.dwui-tab-item.dwui-tab-error){background:var(--dwui-background-tab-header-error, light-dark(red, #a01818));color:var(--dwui-color-text-tab-header-error, azure)}:where(.dwui-tab-radio:checked+.dwui-tab-item.dwui-tab-error){background:var(--dwui-background-tab-header-error-selected, linear-gradient(light-dark(#ff0000, #a01818), light-dark(rgb(240, 136, 136), #c86060), light-dark(#ff0000, #a01818)))}:where(.dwui-tab-radio:not(:checked)+.dwui-tab-item:hover){box-shadow:inset 0 0 0 999px var(--dwui-overlay-color-tab-header-hover, light-dark(rgba(255, 255, 255, .35), rgba(255, 255, 255, .15)))}:where(.dwui-tab-radio:focus-visible+.dwui-tab-item){outline:var(--dwui-width-focus-ring, 2px) solid var(--dwui-outline-color-focus-ring, Highlight);outline-offset:var(--dwui-offset-focus-ring, 2px)}:where(.dwui-tab-items){height:100%;border:1px solid var(--dwui-border-color-tab, light-dark(#565656, #8a8a8a));overflow:hidden}
@@ -0,0 +1,39 @@
1
+ import { ClassValue, StyleValue } from 'vue';
2
+ import { TabContentStatus } from './internal/tab-group-context.cjs';
3
+ interface Props {
4
+ /** タブを識別するID。TabGroupのselectedTabLabelIdに渡す値 */
5
+ labelId: string;
6
+ /** タブの見出しの文字 */
7
+ description: string;
8
+ /** trueの場合、タブを選べなくし、中身も描画しない */
9
+ disabled?: boolean;
10
+ /** タブの見出しの状態。見出しの色が変わる */
11
+ status?: TabContentStatus;
12
+ /** タブの見出しに付けるclass */
13
+ headerClass?: ClassValue;
14
+ /** タブの見出しに付けるstyle */
15
+ headerStyle?: StyleValue;
16
+ }
17
+ interface Slots {
18
+ /** タブの見出しの文字の前に表示するアイコン */
19
+ icon?(): unknown;
20
+ /**
21
+ * タブの中身
22
+ * activated: タブが選ばれて表示されている間はtrue。中身のコンポーネントにpropsで渡し、選ばれたときの処理の契機にする
23
+ * setLoading: trueを渡すと読み込み中の表示にする。表示はTabGroupの#loadingスロット、未指定なら既定の表示
24
+ */
25
+ default?(props: {
26
+ activated: boolean;
27
+ setLoading: (loading: boolean) => void;
28
+ }): unknown;
29
+ }
30
+ type __VLS_Slots = Slots;
31
+ declare const __VLS_base: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
32
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
33
+ declare const _default: typeof __VLS_export;
34
+ export default _default;
35
+ type __VLS_WithSlots<T, S> = T & {
36
+ new (): {
37
+ $slots: S;
38
+ };
39
+ };
package/lib/tab-group.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./tab-group.vue_vue_type_style_index_0_lang-CwVGYZAo.cjs");exports.default=e._sfc_main;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./tab-group.vue_vue_type_style_index_0_lang-CMaufRJV.cjs");exports.default=e._sfc_main;
@@ -0,0 +1,44 @@
1
+ import { ClassValue, StyleValue, VNode } from 'vue';
2
+ interface Props {
3
+ /** ラジオボタンのname。未指定なら自動で採番する */
4
+ tabGroupName?: string;
5
+ /** selectedTabLabelIdが未指定のとき、trueならdisabledでない最初のタブを選ぶ。falseなら先頭のタブ(disabledなら中身は空になる) */
6
+ selectFirstEnabled?: boolean;
7
+ /** タブの見出しを並べる部分に付けるclass */
8
+ headerClass?: ClassValue;
9
+ /** タブの見出しを並べる部分に付けるstyle */
10
+ headerStyle?: StyleValue;
11
+ /** タブの見出しを移動する先(Teleportのto) */
12
+ teleport?: string;
13
+ }
14
+ type __VLS_Props = Props;
15
+ interface Slots {
16
+ default?(): VNode[];
17
+ /** 読み込み中のTabContentに重ねて表示する内容。未指定なら既定の読み込み中表示 */
18
+ loading?(): VNode[];
19
+ }
20
+ type __VLS_Slots = Slots;
21
+ type __VLS_ModelProps = {
22
+ /**
23
+ * 選択するタブのlabelId。未指定なら先頭のタブ
24
+ * 親がいつ代入しても選び直せるよう、v-model:selected-tab-label-idで同期する前提とする
25
+ */
26
+ 'selectedTabLabelId'?: string;
27
+ };
28
+ type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
29
+ declare const __VLS_base: import('vue').DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
30
+ "update:selectedTabLabelId": (value: string | undefined) => any;
31
+ } & {
32
+ "emit:changeSelectedTab": (labelId: string) => any;
33
+ }, string, import('vue').PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
34
+ "onEmit:changeSelectedTab"?: ((labelId: string) => any) | undefined;
35
+ "onUpdate:selectedTabLabelId"?: ((value: string | undefined) => any) | undefined;
36
+ }>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
37
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
38
+ declare const _default: typeof __VLS_export;
39
+ export default _default;
40
+ type __VLS_WithSlots<T, S> = T & {
41
+ new (): {
42
+ $slots: S;
43
+ };
44
+ };
package/lib/tab-group.js CHANGED
@@ -1,4 +1,4 @@
1
- import { _ as f } from "./tab-group.vue_vue_type_style_index_0_lang-CjnBkvvZ.js";
1
+ import { _ as f } from "./tab-group.vue_vue_type_style_index_0_lang-C84mDEOC.js";
2
2
  export {
3
3
  f as default
4
4
  };
@@ -1,5 +1,5 @@
1
1
  import { defineComponent as L, useModel as B, useSlots as N, useId as x, computed as y, ref as A, provide as E, onMounted as M, openBlock as s, createElementBlock as i, createBlock as _, Teleport as F, createElementVNode as o, normalizeStyle as v, normalizeClass as g, Fragment as S, renderList as G, unref as c, createVNode as V, createSlots as j, withCtx as I, createTextVNode as z, toDisplayString as D, resolveDynamicComponent as O, renderSlot as H, mergeModels as C } from "vue";
2
- import { _ as K } from "./label-icon.vue_vue_type_style_index_0_lang-bQFkQ_gC.js";
2
+ import { _ as K } from "./label-icon.vue_vue_type_style_index_0_lang-me52HE2V.js";
3
3
  import { t as P, _ as q } from "./tab-content.vue_vue_type_style_index_0_lang-CcQLHmIF.js";
4
4
  const J = { class: "dwui-tab-group" }, Q = ["id", "name", "disabled", "checked", "onChange"], R = ["for", "data-test-tab-content-control"], U = { class: "dwui-tab-items" }, Z = /* @__PURE__ */ L({
5
5
  __name: "tab-group",
@@ -1 +1 @@
1
- "use strict";const e=require("vue"),v=require("./label-icon.vue_vue_type_style_index_0_lang-C2URq6GP.cjs"),m=require("./tab-content.vue_vue_type_style_index_0_lang-BeCi7Xkp.cjs"),g={class:"dwui-tab-group"},S=["id","name","disabled","checked","onChange"],C=["for","data-test-tab-content-control"],I={class:"dwui-tab-items"},k=e.defineComponent({__name:"tab-group",props:e.mergeModels({tabGroupName:{},selectFirstEnabled:{type:Boolean},headerClass:{type:[Boolean,null,String,Object,Array]},headerStyle:{type:[Boolean,null,String,Object,Array]},teleport:{}},{selectedTabLabelId:{},selectedTabLabelIdModifiers:{}}),emits:e.mergeModels(["emit:changeSelectedTab"],["update:selectedTabLabelId"]),setup(r,{emit:h}){const n=r,_=h,o=e.useModel(r,"selectedTabLabelId"),c=e.useSlots(),s=n.tabGroupName??e.useId(),y=a=>{if(a.type!==m._sfc_main)return;const l=a.props??{},t=l.disabled;return{labelId:String(l["label-id"]??l.labelId),description:l.description,disabled:t===""||!!t,status:l.status,headerClass:l["header-class"]??l.headerClass,headerStyle:l["header-style"]??l.headerStyle,icon:a.children?.icon}},d=e.computed(()=>{const a=[];for(const l of c.default?.()??[]){const t=Array.isArray(l.children)?l.children:[l];for(const b of t){const p=y(b);p&&a.push(p)}}return a}),i=e.computed(()=>o.value!=null?o.value:(n.selectFirstEnabled?d.value.find(l=>!l.disabled):d.value[0])?.labelId),u=e.ref(!1);e.provide(m.tabGroupContextKey,{activeLabelId:i,mounted:u,loadingSlot:()=>c.loading}),e.onMounted(()=>{u.value=!0});const f=a=>{o.value=a,_("emit:changeSelectedTab",a)};return(a,l)=>(e.openBlock(),e.createElementBlock("div",g,[(e.openBlock(),e.createBlock(e.Teleport,{to:n.teleport??"body",disabled:n.teleport==null},[e.createElementVNode("div",{class:e.normalizeClass(["dwui-tab-headers",n.headerClass]),style:e.normalizeStyle(n.headerStyle)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,t=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:t.labelId},[e.createElementVNode("input",{id:`${e.unref(s)}-${t.labelId}`,type:"radio",class:"dwui-tab-radio",name:e.unref(s),disabled:t.disabled,checked:t.labelId===i.value,onChange:b=>f(t.labelId)},null,40,S),e.createElementVNode("label",{for:`${e.unref(s)}-${t.labelId}`,class:e.normalizeClass(["dwui-tab-item",[t.status!=null?`dwui-tab-${t.status}`:void 0,t.headerClass]]),style:e.normalizeStyle(t.headerStyle),"data-test-tab-content-control":t.labelId},[e.createVNode(v._sfc_main,null,e.createSlots({default:e.withCtx(()=>[e.createTextVNode(" "+e.toDisplayString(t.description),1)]),_:2},[t.icon!=null?{name:"icon",fn:e.withCtx(()=>[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(t.icon)))]),key:"0"}:void 0]),1024)],14,C)],64))),128))],6)],8,["to","disabled"])),e.createElementVNode("div",I,[e.renderSlot(a.$slots,"default")])]))}});exports._sfc_main=k;
1
+ "use strict";const e=require("vue"),v=require("./label-icon.vue_vue_type_style_index_0_lang-D9Cimu20.cjs"),m=require("./tab-content.vue_vue_type_style_index_0_lang-BeCi7Xkp.cjs"),g={class:"dwui-tab-group"},S=["id","name","disabled","checked","onChange"],C=["for","data-test-tab-content-control"],I={class:"dwui-tab-items"},k=e.defineComponent({__name:"tab-group",props:e.mergeModels({tabGroupName:{},selectFirstEnabled:{type:Boolean},headerClass:{type:[Boolean,null,String,Object,Array]},headerStyle:{type:[Boolean,null,String,Object,Array]},teleport:{}},{selectedTabLabelId:{},selectedTabLabelIdModifiers:{}}),emits:e.mergeModels(["emit:changeSelectedTab"],["update:selectedTabLabelId"]),setup(r,{emit:h}){const n=r,_=h,o=e.useModel(r,"selectedTabLabelId"),c=e.useSlots(),s=n.tabGroupName??e.useId(),y=a=>{if(a.type!==m._sfc_main)return;const l=a.props??{},t=l.disabled;return{labelId:String(l["label-id"]??l.labelId),description:l.description,disabled:t===""||!!t,status:l.status,headerClass:l["header-class"]??l.headerClass,headerStyle:l["header-style"]??l.headerStyle,icon:a.children?.icon}},d=e.computed(()=>{const a=[];for(const l of c.default?.()??[]){const t=Array.isArray(l.children)?l.children:[l];for(const b of t){const p=y(b);p&&a.push(p)}}return a}),i=e.computed(()=>o.value!=null?o.value:(n.selectFirstEnabled?d.value.find(l=>!l.disabled):d.value[0])?.labelId),u=e.ref(!1);e.provide(m.tabGroupContextKey,{activeLabelId:i,mounted:u,loadingSlot:()=>c.loading}),e.onMounted(()=>{u.value=!0});const f=a=>{o.value=a,_("emit:changeSelectedTab",a)};return(a,l)=>(e.openBlock(),e.createElementBlock("div",g,[(e.openBlock(),e.createBlock(e.Teleport,{to:n.teleport??"body",disabled:n.teleport==null},[e.createElementVNode("div",{class:e.normalizeClass(["dwui-tab-headers",n.headerClass]),style:e.normalizeStyle(n.headerStyle)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,t=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:t.labelId},[e.createElementVNode("input",{id:`${e.unref(s)}-${t.labelId}`,type:"radio",class:"dwui-tab-radio",name:e.unref(s),disabled:t.disabled,checked:t.labelId===i.value,onChange:b=>f(t.labelId)},null,40,S),e.createElementVNode("label",{for:`${e.unref(s)}-${t.labelId}`,class:e.normalizeClass(["dwui-tab-item",[t.status!=null?`dwui-tab-${t.status}`:void 0,t.headerClass]]),style:e.normalizeStyle(t.headerStyle),"data-test-tab-content-control":t.labelId},[e.createVNode(v._sfc_main,null,e.createSlots({default:e.withCtx(()=>[e.createTextVNode(" "+e.toDisplayString(t.description),1)]),_:2},[t.icon!=null?{name:"icon",fn:e.withCtx(()=>[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(t.icon)))]),key:"0"}:void 0]),1024)],14,C)],64))),128))],6)],8,["to","disabled"])),e.createElementVNode("div",I,[e.renderSlot(a.$slots,"default")])]))}});exports._sfc_main=k;
@@ -0,0 +1,12 @@
1
+ import { Component } from 'vue';
2
+ /**
3
+ * アイコンとラベルの組み合わせ
4
+ */
5
+ export interface LabelPreset {
6
+ /** アイコンのコンポーネント */
7
+ icon: Component;
8
+ /** アイコンに渡すProps */
9
+ iconProps?: Record<string, unknown>;
10
+ /** ラベル。言語切替に追従させる場合は、描画のたびに呼ばれる関数で渡す */
11
+ label: string | (() => string);
12
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@digitalwalletcorp/vue-core",
3
- "version": "1.1.0",
3
+ "version": "1.2.1",
4
4
  "type": "module",
5
5
  "description": "Basic UI components for Vue 3",
6
6
  "main": "lib/index.cjs",
@@ -11,31 +11,47 @@
11
11
  ],
12
12
  "exports": {
13
13
  ".": {
14
- "types": "./lib/index.d.ts",
15
- "import": "./lib/index.js",
16
- "require": "./lib/index.cjs"
14
+ "import": {
15
+ "types": "./lib/index.d.ts",
16
+ "default": "./lib/index.js"
17
+ },
18
+ "require": {
19
+ "types": "./lib/index.d.cts",
20
+ "default": "./lib/index.cjs"
21
+ }
17
22
  },
18
23
  "./nuxt": {
19
24
  "types": "./lib/nuxt.d.ts",
20
25
  "import": "./lib/nuxt.js"
21
26
  },
22
27
  "./register": {
23
- "types": "./lib/register.d.ts",
24
- "import": "./lib/register.js",
25
- "require": "./lib/register.cjs"
28
+ "import": {
29
+ "types": "./lib/register.d.ts",
30
+ "default": "./lib/register.js"
31
+ },
32
+ "require": {
33
+ "types": "./lib/register.d.cts",
34
+ "default": "./lib/register.cjs"
35
+ }
26
36
  },
27
37
  "./global": {
28
38
  "types": "./lib/global.d.ts"
29
39
  },
30
40
  "./style.css": "./lib/style.css",
31
41
  "./*": {
32
- "types": "./lib/*.d.ts",
33
- "import": "./lib/*.js",
34
- "require": "./lib/*.cjs"
42
+ "import": {
43
+ "types": "./lib/*.d.ts",
44
+ "default": "./lib/*.js"
45
+ },
46
+ "require": {
47
+ "types": "./lib/*.d.cts",
48
+ "default": "./lib/*.cjs"
49
+ }
35
50
  }
36
51
  },
37
52
  "scripts": {
38
53
  "build": "vite build",
54
+ "yarn:dedupe": "npx yarn-deduplicate --strategy highest yarn.lock",
39
55
  "install:dev": "rm -rf lib dest && find node_modules -mindepth 1 -delete && yarn install",
40
56
  "typecheck": "vue-tsc --noEmit -p tsconfig.json",
41
57
  "version:patch": "npm version patch",
@@ -68,11 +84,11 @@
68
84
  "src/**/*"
69
85
  ],
70
86
  "peerDependencies": {
71
- "@digitalwalletcorp/vue-svg-icons": "^1.13.0",
87
+ "@digitalwalletcorp/vue-svg-icons": "^1.15.3",
72
88
  "vue": "^3.5.29"
73
89
  },
74
90
  "devDependencies": {
75
- "@digitalwalletcorp/vue-svg-icons": "^1.13.0",
91
+ "@digitalwalletcorp/vue-svg-icons": "^1.15.3",
76
92
  "@nuxt/kit": "^3.17.5",
77
93
  "@types/node": "24.13.6",
78
94
  "@vitejs/plugin-vue": "^6.0.0",
@@ -6,7 +6,7 @@
6
6
  class="dwui-accordion-fieldset"
7
7
  :disabled="props.disabled"
8
8
  >
9
- <legend>
9
+ <legend class="dwui-accordion-legend">
10
10
  <button
11
11
  type="button"
12
12
  class="dwui-accordion-toggle"
@@ -85,7 +85,7 @@ onMounted(() => {
85
85
  position: relative;
86
86
  }
87
87
 
88
- /* 詳細度0のため、利用側がbutton要素に装飾を当てている場合はそちらが優先される。打ち消しは利用側のCSSで行う */
88
+ /* 開閉ボタンは押しボタンではなく凡例と一体の操作として見せるため、既定では枠・背景を持たない */
89
89
  :where(.dwui-accordion-toggle) {
90
90
  display: inline-flex;
91
91
  align-items: center;
@@ -103,6 +103,11 @@ onMounted(() => {
103
103
  cursor: not-allowed;
104
104
  }
105
105
 
106
+ :where(.dwui-accordion-toggle:focus-visible) {
107
+ outline: var(--dwui-width-focus-ring, 2px) solid var(--dwui-outline-color-focus-ring, Highlight);
108
+ outline-offset: var(--dwui-offset-focus-ring, 2px);
109
+ }
110
+
106
111
  :where(.dwui-accordion-contents) {
107
112
  position: relative;
108
113
  width: fit-content;
@@ -160,7 +160,7 @@ onMounted(() => {
160
160
  content: '';
161
161
  position: absolute;
162
162
  inset: 0;
163
- background-image: linear-gradient(180deg, transparent 0%, transparent 60%, var(--dwui-accordion-section-fade, Canvas) 100%);
163
+ background-image: linear-gradient(180deg, transparent 0%, transparent 60%, var(--dwui-color-accordion-section-fade, Canvas) 100%);
164
164
  pointer-events: none;
165
165
  }
166
166
 
@@ -172,9 +172,14 @@ onMounted(() => {
172
172
  width: 100%;
173
173
  }
174
174
 
175
+ /* 開閉ボタンは押しボタンではなくアイコンとラベルの操作として見せるため、既定では枠・背景を持たない */
175
176
  :where(.dwui-accordion-section-toggle) {
176
177
  display: inline-flex;
177
178
  align-items: center;
179
+ padding: 0;
180
+ border: none;
181
+ background: none;
182
+ color: inherit;
178
183
  cursor: pointer;
179
184
  }
180
185
 
@@ -183,6 +188,11 @@ onMounted(() => {
183
188
  cursor: not-allowed;
184
189
  }
185
190
 
191
+ :where(.dwui-accordion-section-toggle:focus-visible) {
192
+ outline: var(--dwui-width-focus-ring, 2px) solid var(--dwui-outline-color-focus-ring, Highlight);
193
+ outline-offset: var(--dwui-offset-focus-ring, 2px);
194
+ }
195
+
186
196
  :where(.dwui-accordion-section-toggle[aria-expanded='true']) {
187
197
  margin-top: 8px;
188
198
  }
@@ -2,7 +2,7 @@
2
2
  アイコンとラベルを持つボタン
3
3
  -->
4
4
  <template>
5
- <button>
5
+ <button class="dwui-label-button">
6
6
  <LabelIcon
7
7
  :preset="props.preset"
8
8
  :gap="props.gap"
@@ -55,3 +55,34 @@ interface Slots {
55
55
  }
56
56
  const slots = defineSlots<Slots>();
57
57
  </script>
58
+
59
+ <style>
60
+ :where(.dwui-label-button) {
61
+ display: inline-block;
62
+ padding: 2px 6px;
63
+ border: 1px solid var(--dwui-border-color-label-button, light-dark(#8f8f8f, #6b6f76));
64
+ border-radius: 3px;
65
+ background: var(--dwui-background-label-button, light-dark(#f4f4f4, #3a3c40));
66
+ color: var(--dwui-color-text-label-button, light-dark(#1a1a1a, #e6e6e6));
67
+ font: inherit;
68
+ cursor: pointer;
69
+ }
70
+
71
+ :where(.dwui-label-button:not(:disabled):hover) {
72
+ background: var(--dwui-background-label-button-hover, light-dark(#e6e6e6, #474a50));
73
+ }
74
+
75
+ :where(.dwui-label-button:not(:disabled):active) {
76
+ background: var(--dwui-background-label-button-active, light-dark(#d6d6d6, #2f3135));
77
+ }
78
+
79
+ :where(.dwui-label-button:disabled) {
80
+ opacity: 0.6;
81
+ cursor: not-allowed;
82
+ }
83
+
84
+ :where(.dwui-label-button:focus-visible) {
85
+ outline: var(--dwui-width-focus-ring, 2px) solid var(--dwui-outline-color-focus-ring, Highlight);
86
+ outline-offset: var(--dwui-offset-focus-ring, 2px);
87
+ }
88
+ </style>
@@ -4,7 +4,7 @@
4
4
  <template>
5
5
  <span
6
6
  class="dwui-label-icon"
7
- :style="props.gap == null ? undefined : { '--dwui-label-icon-gap': props.gap }"
7
+ :style="props.gap == null ? undefined : { '--dwui-gap-label-icon': props.gap }"
8
8
  >
9
9
  <slot name="icon">
10
10
  <component
@@ -70,6 +70,6 @@ const slots = defineSlots<Slots>();
70
70
 
71
71
  /* アイコンとラベルの間隔。gapはflex専用のためmarginで空ける */
72
72
  :where(.dwui-label-icon > .dwui-label:not(:first-child)) {
73
- margin-left: var(--dwui-label-icon-gap, 0.25em);
73
+ margin-left: var(--dwui-gap-label-icon, 0.25em);
74
74
  }
75
75
  </style>
@@ -87,14 +87,14 @@ const presetIcon = computed((): { component: Component; props: Record<string, un
87
87
  display: block;
88
88
  margin: 4px 0 8px;
89
89
  padding-top: 2px;
90
- font-size: var(--dwui-page-section-font-size, 12px);
90
+ font-size: var(--dwui-font-size-page-section, 12px);
91
91
  font-weight: 500;
92
92
  }
93
93
 
94
94
  :where(.dwui-page-section-title) {
95
95
  display: flex;
96
96
  align-items: center;
97
- font-size: var(--dwui-page-section-title-font-size, 14px);
97
+ font-size: var(--dwui-font-size-page-section-title, 14px);
98
98
  }
99
99
 
100
100
  :where(.dwui-page-section-content) {
@@ -45,12 +45,12 @@ const slots = defineSlots<Slots>();
45
45
  display: flex;
46
46
  align-items: center;
47
47
  justify-content: space-between;
48
- width: var(--dwui-page-title-width, auto);
48
+ width: var(--dwui-width-page-title, auto);
49
49
  padding: 4px;
50
50
  border-radius: 4px;
51
- background: var(--dwui-page-title-bg, linear-gradient(#323232 0%, rgb(32, 32, 31) 25%, rgb(32, 32, 31) 75%, #323232 100%));
52
- color: var(--dwui-page-title-text, rgb(220, 220, 220));
53
- font-size: var(--dwui-page-title-font-size, 14px);
54
- font-weight: var(--dwui-page-title-font-weight, normal);
51
+ background: var(--dwui-background-page-title, linear-gradient(light-dark(#323232, #3c3f45) 0%, light-dark(rgb(32, 32, 31), #2b2d31) 25%, light-dark(rgb(32, 32, 31), #2b2d31) 75%, light-dark(#323232, #3c3f45) 100%));
52
+ color: var(--dwui-color-text-page-title, rgb(220, 220, 220));
53
+ font-size: var(--dwui-font-size-page-title, 14px);
54
+ font-weight: var(--dwui-font-weight-page-title, normal);
55
55
  }
56
56
  </style>
@@ -106,7 +106,7 @@ const setLoading = (value: boolean) => {
106
106
  padding: 4px 8px;
107
107
  overflow: hidden;
108
108
  /* 全幅を横断すると速度が出てカクつくため、既定は固定の移動量とease-outとフェードでスライドインする */
109
- animation: dwui-tab-slide-in var(--dwui-tab-slide-duration, 0.35s) var(--dwui-tab-slide-easing, cubic-bezier(0.22, 1, 0.36, 1));
109
+ animation: dwui-tab-slide-in var(--dwui-duration-tab-slide, 0.35s) var(--dwui-easing-tab-slide, cubic-bezier(0.22, 1, 0.36, 1));
110
110
  }
111
111
 
112
112
  :where(.dwui-tab-loading) {
@@ -116,14 +116,14 @@ const setLoading = (value: boolean) => {
116
116
  display: flex;
117
117
  align-items: center;
118
118
  justify-content: center;
119
- background: var(--dwui-loading-overlay, rgba(0, 0, 0, 0.25));
119
+ background: var(--dwui-overlay-color-loading, light-dark(rgba(0, 0, 0, 0.25), rgba(0, 0, 0, 0.45)));
120
120
  }
121
121
 
122
122
  :where(.dwui-tab-loading-spinner) {
123
- width: var(--dwui-loading-spinner-size, 40px);
124
- height: var(--dwui-loading-spinner-size, 40px);
125
- border: 4px solid var(--dwui-loading-spinner-track, rgba(255, 255, 255, 0.4));
126
- border-top-color: var(--dwui-loading-spinner-color, #ffffff);
123
+ width: var(--dwui-size-loading-spinner, 40px);
124
+ height: var(--dwui-size-loading-spinner, 40px);
125
+ border: 4px solid var(--dwui-border-color-loading-spinner-track, rgba(255, 255, 255, 0.4));
126
+ border-top-color: var(--dwui-border-color-loading-spinner, #ffffff);
127
127
  border-radius: 50%;
128
128
  animation: dwui-tab-loading-spin 0.8s linear infinite;
129
129
  }
@@ -137,7 +137,7 @@ const setLoading = (value: boolean) => {
137
137
  @keyframes dwui-tab-slide-in {
138
138
  0% {
139
139
  opacity: 0;
140
- transform: translateX(var(--dwui-tab-slide-distance, -128px));
140
+ transform: translateX(var(--dwui-distance-tab-slide, -128px));
141
141
  }
142
142
  100% {
143
143
  opacity: 1;