@salesql/sql_components_vue3 0.2.1 → 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 +17 -18
- package/dist/constants/events.d.ts +2 -0
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +9 -0
- package/dist/index.es.js +151 -55
- package/dist/index.es.js.map +1 -1
- package/dist/sql_components_vue3.css +1 -1
- package/dist/ui/BasicTable/BasicTable.types.d.ts +16 -0
- package/dist/ui/BasicTable/BasicTable.vue.d.ts +46 -0
- package/dist/ui/BasicTable/index.d.ts +2 -0
- package/dist/ui/SqlButton/SqlButton.types.d.ts +31 -0
- package/dist/ui/SqlButton/SqlButton.vue.d.ts +75 -0
- package/dist/ui/SqlButton/index.d.ts +2 -0
- package/dist/ui/SqlSpinner/SqlSpinner.types.d.ts +11 -0
- package/dist/ui/SqlSpinner/SqlSpinner.vue.d.ts +34 -0
- package/dist/ui/SqlSpinner/index.d.ts +2 -0
- package/package.json +14 -4
package/README.md
CHANGED
|
@@ -114,7 +114,7 @@ Ejemplo:
|
|
|
114
114
|
|
|
115
115
|
```vue
|
|
116
116
|
<script setup lang="ts">
|
|
117
|
-
|
|
117
|
+
import { SqlButton } from '@salesql/sql_components_vue3';
|
|
118
118
|
</script>
|
|
119
119
|
|
|
120
120
|
<template>
|
|
@@ -136,7 +136,7 @@ Los estilos base se importan automáticamente desde la librería (`base.scss`).
|
|
|
136
136
|
|
|
137
137
|
```vue
|
|
138
138
|
<script setup lang="ts">
|
|
139
|
-
|
|
139
|
+
// lógica/props
|
|
140
140
|
</script>
|
|
141
141
|
|
|
142
142
|
<template>
|
|
@@ -146,13 +146,13 @@ Los estilos base se importan automáticamente desde la librería (`base.scss`).
|
|
|
146
146
|
</template>
|
|
147
147
|
|
|
148
148
|
<style lang="scss" scoped>
|
|
149
|
-
|
|
150
|
-
|
|
149
|
+
@use '../assets/css/colors.scss' as colors;
|
|
150
|
+
@use '../assets/css/spacing.scss' as s;
|
|
151
151
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
152
|
+
.sql-x {
|
|
153
|
+
color: colors.$primary-main;
|
|
154
|
+
padding: s.spacing(2);
|
|
155
|
+
}
|
|
156
156
|
</style>
|
|
157
157
|
```
|
|
158
158
|
|
|
@@ -162,7 +162,7 @@ Los estilos base se importan automáticamente desde la librería (`base.scss`).
|
|
|
162
162
|
|
|
163
163
|
```vue
|
|
164
164
|
<script setup lang="ts">
|
|
165
|
-
|
|
165
|
+
import SqlX from './SqlX.vue';
|
|
166
166
|
</script>
|
|
167
167
|
|
|
168
168
|
<template>
|
|
@@ -186,11 +186,11 @@ Los estilos base se importan automáticamente desde la librería (`base.scss`).
|
|
|
186
186
|
En `components/src/index.ts`:
|
|
187
187
|
|
|
188
188
|
```ts
|
|
189
|
-
import
|
|
189
|
+
import './assets/css/base.scss';
|
|
190
190
|
|
|
191
|
-
export { default as SqlButton } from
|
|
192
|
-
export { default as SqlSpinner } from
|
|
193
|
-
export { default as SqlX } from
|
|
191
|
+
export { default as SqlButton } from './components/SqlButton.vue';
|
|
192
|
+
export { default as SqlSpinner } from './components/SqlSpinner.vue';
|
|
193
|
+
export { default as SqlX } from './components/SqlX.vue';
|
|
194
194
|
```
|
|
195
195
|
|
|
196
196
|
### 4. Probar con Histoire
|
|
@@ -229,12 +229,11 @@ pnpm release:publish
|
|
|
229
229
|
- **Enums/constantes:**
|
|
230
230
|
```ts
|
|
231
231
|
export const SQL_SPINNER_SIZES = {
|
|
232
|
-
SMALL:
|
|
233
|
-
MEDIUM:
|
|
234
|
-
LARGE:
|
|
232
|
+
SMALL: 'small',
|
|
233
|
+
MEDIUM: 'medium',
|
|
234
|
+
LARGE: 'large',
|
|
235
235
|
} as const;
|
|
236
|
-
export type SqlSpinnerSize =
|
|
237
|
-
(typeof SQL_SPINNER_SIZES)[keyof typeof SQL_SPINNER_SIZES];
|
|
236
|
+
export type SqlSpinnerSize = (typeof SQL_SPINNER_SIZES)[keyof typeof SQL_SPINNER_SIZES];
|
|
238
237
|
```
|
|
239
238
|
|
|
240
239
|
---
|
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),r={LIGHT:"light",DARK:"dark"},E={SMALL:"small",MEDIUM:"medium",LARGE:"large"},b=["aria-label","aria-live","aria-hidden"],B={key:0,class:"sr-only"},T=e.defineComponent({__name:"SqlSpinner",props:{type:{type:String,default:r.DARK},size:{type:String,default:E.SMALL},label:{type:String,default:""}},setup(t){const s=t,n=e.computed(()=>s.label&&s.label.length>0);return(l,a)=>(e.openBlock(),e.createElementBlock("span",{class:e.normalizeClass(["sql-spinner",[`theme-${t.type}`,`sql-spinner--${t.size}`]]),role:"status","aria-label":n.value?t.label:void 0,"aria-live":n.value?"polite":void 0,"aria-hidden":n.value?void 0:"true"},[a[0]||(a[0]=e.createElementVNode("span",{class:"ring"},null,-1)),n.value?(e.openBlock(),e.createElementBlock("span",B,e.toDisplayString(t.label),1)):e.createCommentVNode("",!0)],10,b))}}),u=(t,s)=>{const n=t.__vccOpts||t;for(const[l,a]of s)n[l]=a;return n},S=u(T,[["__scopeId","data-v-9694500e"]]),c={DEFAULT:"default",PRIMARY:"primary",SECONDARY:"secondary",TERTIARY:"tertiary",SPECIAL:"special",SPECIAL2:"special2",SPECIAL3:"special3",DOTTED:"dotted",DANGER:"danger",GRADIENT:"gradient"},m={SMALL:"small",SMALL_SQUARE:"small-square",SMALL_SQUARE_NO_PADDING:"small-square-no-padding",MEDIUM:"medium",MEDIUM_SQUARE:"medium-square",LARGE:"large",LARGE_SQUARE:"large-square",XLARGE:"xlarge",XLARGE_SQUARE:"xlarge-square"},y={BUTTON:"button",SUBMIT:"submit",RESET:"reset"},g="click",L=["type","disabled","autofocus","aria-busy","aria-disabled","aria-pressed"],k={key:1,class:"slotted-content"},A=e.defineComponent({__name:"SqlButton",props:{type:{type:String,default:c.DEFAULT},size:{type:String,default:m.LARGE},nativeType:{type:String,default:y.BUTTON},selected:{type:Boolean,default:null},loading:Boolean,disabled:Boolean,plain:Boolean,autofocus:Boolean,round:Boolean,circle:Boolean},setup(t,{emit:s}){const n=t,l=s,a=e.computed(()=>n.type===c.PRIMARY||n.type===c.DANGER?r.LIGHT:r.DARK);function o(i){n.disabled||n.loading||l(g,i)}return(i,_)=>(e.openBlock(),e.createElementBlock("button",{class:e.normalizeClass(["sql-button",[t.type?`sql-button--${t.type}`:"",t.size?`sql-button--${t.size}`:"",{"is-disabled":t.disabled,"is-loading":t.loading,"is-circle":t.circle,"is-plain":t.plain,"is-round":t.round,"selectable-button":t.selected!==null,"is-selected":t.selected}]]),type:t.nativeType,disabled:t.disabled||t.loading,autofocus:t.autofocus,"aria-busy":t.loading||void 0,"aria-disabled":t.disabled||t.loading||void 0,"aria-pressed":t.selected!==null?!!t.selected:void 0,onClick:o},[e.createElementVNode("span",{class:e.normalizeClass(["slot-container",{"is-loading":t.loading}])},[t.loading?(e.openBlock(),e.createBlock(e.unref(S),{key:0,class:"sql-spinner",type:a.value},null,8,["type"])):e.createCommentVNode("",!0),i.$slots.default?(e.openBlock(),e.createElementBlock("div",k,[e.renderSlot(i.$slots,"default",{},void 0,!0)])):e.createCommentVNode("",!0)],2)],10,L))}}),N=u(A,[["__scopeId","data-v-9eeb1a72"]]),d={LEFT:"left",CENTER:"center",RIGHT:"right"},p={class:"basic-table"},I={class:"basic-table__wrapper"},f={class:"basic-table__table"},R={key:0},v=["colspan"],h=e.defineComponent({__name:"BasicTable",props:{columns:{type:Array,required:!0},rows:{type:Array,required:!0},emptyMessage:{type:String,default:""}},setup(t){return(s,n)=>(e.openBlock(),e.createElementBlock("div",p,[e.createElementVNode("div",I,[e.createElementVNode("table",f,[e.createElementVNode("thead",null,[e.createElementVNode("tr",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.columns,l=>{var a;return e.openBlock(),e.createElementBlock("th",{key:l.key,class:e.normalizeClass(`basic-table__th--${(a=l.align)!=null?a:e.unref(d).LEFT}`),style:e.normalizeStyle(l.width?{width:l.width}:void 0)},e.toDisplayString(l.label),7)}),128))])]),e.createElementVNode("tbody",null,[t.rows.length===0?(e.openBlock(),e.createElementBlock("tr",R,[e.createElementVNode("td",{class:"basic-table__empty",colspan:t.columns.length,"data-testid":"basic-table-empty"},[e.renderSlot(s.$slots,"empty",{},()=>[e.createTextVNode(e.toDisplayString(t.emptyMessage),1)],!0)],8,v)])):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.rows,l=>(e.openBlock(),e.createElementBlock("tr",{key:l.id,"data-testid":"basic-table-row"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.columns,a=>{var o;return e.openBlock(),e.createElementBlock("td",{key:a.key,class:e.normalizeClass(`basic-table__td--${(o=a.align)!=null?o:e.unref(d).LEFT}`)},[e.renderSlot(s.$slots,`cell-${a.key}`,{row:l},()=>[e.createTextVNode(e.toDisplayString(l[a.key]),1)],!0)],2)}),128))]))),128))])])])]))}}),C=u(h,[["__scopeId","data-v-8f713759"]]);exports.BASIC_TABLE_ALIGN=d;exports.BasicTable=C;exports.SQL_BUTTON_NATIVE_TYPES=y;exports.SQL_BUTTON_SIZES=m;exports.SQL_BUTTON_TYPES=c;exports.SQL_SPINNER_SIZES=E;exports.SQL_SPINNER_THEME_MODES=r;exports.SqlButton=N;exports.SqlSpinner=S;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/constants/sql-components.ts","../src/components/SqlSpinner.vue","../src/constants/events.ts","../src/components/SqlButton.vue"],"sourcesContent":["// Tipos de botón (clases: sql-button--<type>)\nexport const SQL_BUTTON_TYPES = {\n DEFAULT: 'default',\n PRIMARY: 'primary',\n SECONDARY: 'secondary',\n TERTIARY: 'tertiary',\n SPECIAL: 'special',\n SPECIAL2: 'special2',\n DOTTED: 'dotted',\n} as const\nexport type SqlButtonType = typeof SQL_BUTTON_TYPES[keyof typeof SQL_BUTTON_TYPES]\n\n// Tamaños de botón (clases: sql-button--<size>)\nexport const SQL_BUTTON_SIZES = {\n SMALL: 'small',\n SMALL_SQUARE: 'small-square',\n SMALL_SQUARE_NO_PADDING: 'small-square-no-padding',\n MEDIUM: 'medium',\n MEDIUM_SQUARE: 'medium-square',\n LARGE: 'large',\n LARGE_SQUARE: 'large-square',\n XLARGE: 'xlarge',\n XLARGE_SQUARE: 'xlarge-square',\n} as const\nexport type SqlButtonSize = typeof SQL_BUTTON_SIZES[keyof typeof SQL_BUTTON_SIZES]\n\n// type nativo del <button>\nexport const SQL_BUTTON_NATIVE_TYPES = {\n BUTTON: 'button',\n SUBMIT: 'submit',\n RESET: 'reset',\n} as const\nexport type SqlButtonNativeType = typeof SQL_BUTTON_NATIVE_TYPES[keyof typeof SQL_BUTTON_NATIVE_TYPES]\n\n// Tema del spinner (lo usas en el computed del botón)\nexport const SQL_SPINNER_THEME_MODES = {\n LIGHT: 'light', // para botones oscuros: spinner claro\n DARK: 'dark', // para botones claros: spinner oscuro\n} as const\nexport type SqlSpinnerThemeMode = typeof SQL_SPINNER_THEME_MODES[keyof typeof SQL_SPINNER_THEME_MODES]\n\nexport const SQL_SPINNER_SIZES = {\n SMALL: 'small',\n MEDIUM: 'medium',\n LARGE: 'large',\n} as const;\n\nexport type SqlSpinnerSize = (typeof SQL_SPINNER_SIZES)[keyof typeof SQL_SPINNER_SIZES];\n","<script setup lang=\"ts\">\n import { type PropType, computed } from \"vue\";\n import {\n SQL_SPINNER_SIZES,\n SQL_SPINNER_THEME_MODES,\n type SqlSpinnerSize,\n type SqlSpinnerThemeMode,\n } from \"../constants/sql-components\";\n\n const props = defineProps({\n type: {\n type: String as PropType<SqlSpinnerThemeMode>,\n default: SQL_SPINNER_THEME_MODES.DARK,\n },\n size: {\n type: String as PropType<SqlSpinnerSize>,\n default: SQL_SPINNER_SIZES.MEDIUM,\n },\n // Opcional: texto accesible (si no hay, marcamos aria-hidden)\n label: {\n type: String,\n default: \"\",\n },\n });\n\n const hasLabel = computed(() => props.label && props.label.length > 0);\n</script>\n\n<template>\n <span\n class=\"sql-spinner\"\n :class=\"[`theme-${type}`, `sql-spinner--${size}`]\"\n role=\"status\"\n :aria-label=\"hasLabel ? label : undefined\"\n :aria-live=\"hasLabel ? 'polite' : undefined\"\n :aria-hidden=\"hasLabel ? undefined : 'true'\"\n >\n <span class=\"ring\" />\n <span v-if=\"hasLabel\" class=\"sr-only\">{{ label }}</span>\n </span>\n</template>\n\n<style lang=\"scss\" scoped>\n @use \"../assets/css/colors.scss\" as colors;\n\n /* Accesibilidad (solo-lectura visual) */\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n }\n\n @keyframes sql-spin {\n to {\n transform: rotate(360deg);\n }\n }\n\n .sql-spinner {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n\n /* Tamaños por clase */\n &.sql-spinner--small {\n width: 12px;\n height: 12px;\n }\n &.sql-spinner--medium {\n width: 16px;\n height: 16px;\n }\n &.sql-spinner--large {\n width: 24px;\n height: 24px;\n }\n\n .ring {\n box-sizing: border-box;\n width: 100%;\n height: 100%;\n border-radius: 50%;\n border-style: solid;\n border-width: 2px;\n animation: sql-spin 0.8s linear infinite;\n }\n\n /* Temas */\n &.theme-light .ring {\n /* 3 lados visibles, 1 transparente para efecto “spinner” */\n border-color: colors.$white colors.$white colors.$white transparent;\n }\n\n &.theme-dark .ring {\n border-color: colors.$primary-main colors.$primary-main\n colors.$primary-main transparent;\n }\n }\n</style>\n","// Evento genérico de click para props/emit\nexport const CLICK = 'click' as const\nexport type ClickEventName = typeof CLICK\n","<template>\n <button\n class=\"sql-button\"\n :type=\"nativeType\"\n :disabled=\"disabled || loading\"\n :autofocus=\"autofocus\"\n :aria-busy=\"loading || undefined\"\n :aria-disabled=\"disabled || loading || undefined\"\n :aria-pressed=\"selected !== null ? !!selected : undefined\"\n :class=\"[\n type ? `sql-button--${type}` : '',\n size ? `sql-button--${size}` : '',\n {\n 'is-disabled': disabled,\n 'is-loading': loading,\n 'is-circle': circle,\n 'is-plain': plain,\n 'is-round': round,\n 'selectable-button': selected !== null,\n 'is-selected': selected,\n },\n ]\"\n @click=\"handleClick\"\n >\n <!-- Siempre renderizamos el contenedor para que el spinner funcione con o sin texto -->\n <span class=\"slot-container\" :class=\"{ 'is-loading': loading }\">\n <!-- Spinner superpuesto cuando loading -->\n <SqlSpinner v-if=\"loading\" class=\"sql-spinner\" :type=\"spinnerType\" />\n\n <!-- Texto/slot (se oculta visualmente cuando loading) -->\n <div v-if=\"$slots.default\" class=\"slotted-content\">\n <slot />\n </div>\n </span>\n </button>\n</template>\n<script setup lang=\"ts\">\n import { computed, type PropType } from \"vue\";\n import SqlSpinner from \"@shared/components/SqlSpinner.vue\";\n import {\n SQL_BUTTON_NATIVE_TYPES,\n SQL_BUTTON_SIZES,\n SQL_BUTTON_TYPES,\n SQL_SPINNER_THEME_MODES,\n type SqlButtonNativeType,\n type SqlButtonSize,\n type SqlButtonType,\n } from \"@shared/constants/sql-components\";\n import { CLICK } from \"@shared/constants/events\";\n\n const props = defineProps({\n type: {\n type: String as PropType<SqlButtonType>,\n default: SQL_BUTTON_TYPES.DEFAULT,\n },\n size: {\n type: String as PropType<SqlButtonSize>,\n default: SQL_BUTTON_SIZES.LARGE,\n },\n nativeType: {\n type: String as PropType<SqlButtonNativeType>,\n default: SQL_BUTTON_NATIVE_TYPES.BUTTON,\n },\n selected: {\n type: Boolean as PropType<boolean | null>,\n default: null,\n },\n loading: Boolean,\n disabled: Boolean,\n plain: Boolean,\n autofocus: Boolean,\n round: Boolean,\n circle: Boolean,\n });\n\n const emit = defineEmits<{\n (e: typeof CLICK, event: MouseEvent): void;\n }>();\n\n const spinnerType = computed(() =>\n props.type === SQL_BUTTON_TYPES.PRIMARY\n ? SQL_SPINNER_THEME_MODES.LIGHT\n : SQL_SPINNER_THEME_MODES.DARK\n );\n\n function handleClick(event: MouseEvent) {\n if (props.disabled || props.loading) return; // guard\n emit(CLICK, event);\n }\n</script>\n\n<style lang=\"scss\" scoped>\n @use \"../assets/css/colors.scss\" as colors;\n @use \"../assets/css/spacing.scss\" as s;\n\n /* keyframes a nivel raíz */\n @keyframes rotating {\n 0% {\n transform: rotateZ(360deg);\n }\n 100% {\n transform: rotateZ(0deg);\n }\n }\n\n $default-background: colors.$white;\n\n .sql-button {\n padding: 0;\n\n color: colors.$primary-main;\n font-weight: 500;\n font-size: 14px;\n line-height: 20px;\n\n border-width: 0;\n border-radius: 4px;\n outline: none;\n\n cursor: pointer;\n transition: background 0.2s, color 0.2s, border-color 0.2s;\n\n &:active,\n &:hover {\n outline: none;\n }\n\n &[disabled] {\n cursor: not-allowed;\n }\n\n &.is-circle {\n padding: s.spacing(1);\n border-radius: 50%;\n }\n\n .slot-container {\n position: relative;\n\n display: inline-flex;\n justify-content: center;\n align-items: center;\n\n .slotted-content {\n display: inline-flex;\n align-items: center;\n }\n\n &.is-loading {\n .slotted-content {\n visibility: hidden;\n } /* el contenido sigue en el flujo para no cambiar ancho/alto */\n }\n\n .sql-spinner {\n position: absolute;\n inset: 0;\n\n display: flex;\n justify-content: center;\n align-items: center;\n\n width: 1em;\n height: 1em;\n margin: auto;\n\n pointer-events: none;\n }\n }\n\n /* Types */\n &.sql-button--default {\n color: colors.$primary-main;\n background-color: $default-background;\n\n &:hover {\n background-color: colors.$primary-tint;\n }\n\n &.is-disabled {\n color: colors.$primary-mid;\n background-color: $default-background;\n }\n }\n\n &.sql-button--primary {\n color: colors.$white;\n background-color: colors.$primary-accent-main;\n\n &:hover {\n background-color: colors.$primary-accent-shadow;\n }\n &.is-disabled {\n background-color: colors.$primary-accent-mid;\n }\n }\n\n &.sql-button--secondary {\n color: colors.$primary-main;\n background-color: colors.$secondary-background;\n\n &:hover {\n background-color: colors.$primary-tint;\n }\n &.is-disabled {\n color: colors.$primary-secondary-text;\n background-color: colors.$primary-tint;\n }\n }\n\n &.sql-button--tertiary {\n color: colors.$primary-main;\n background-color: $default-background;\n\n &:hover {\n background-color: colors.$primary-tint;\n }\n &:active {\n color: $default-background;\n background-color: colors.$primary-secondary-text;\n }\n &.is-disabled {\n color: colors.$primary-mid;\n background-color: $default-background;\n &:active {\n color: colors.$primary-mid;\n background-color: $default-background;\n }\n }\n\n &.selectable-button {\n &:active {\n color: colors.$primary-accent-main !important;\n background: colors.$primary-accent-background !important;\n }\n\n &.is-selected {\n color: colors.$primary-accent-main;\n border: 1px solid colors.$primary-accent-main;\n background: colors.$primary-accent-background;\n }\n }\n }\n\n &.sql-button--special {\n color: colors.$primary-accent-main;\n border: 1px solid colors.$primary-accent-mid;\n background-color: $default-background;\n\n &:hover {\n border: 1px solid colors.$primary-accent-main;\n }\n &:active {\n border: 1px solid colors.$primary-accent-main;\n background-color: colors.$primary-accent-background;\n }\n &.is-disabled {\n color: colors.$primary-accent-mid;\n border: 1px solid colors.$primary-accent-tint;\n background-color: $default-background;\n\n &:active {\n border: 1px solid colors.$primary-accent-tint;\n background-color: $default-background;\n }\n }\n }\n\n &.sql-button--special2 {\n color: colors.$primary-accent-main;\n background-color: $default-background;\n\n &:hover {\n background-color: colors.$primary-accent-background;\n }\n &:active {\n color: colors.$primary-accent-main;\n background-color: colors.$primary-accent-tint;\n }\n &.is-disabled {\n color: colors.$primary-accent-mid;\n background-color: colors.$primary-accent-background;\n &:active {\n color: colors.$primary-accent-mid;\n background-color: colors.$primary-accent-background;\n }\n }\n }\n\n &.sql-button--dotted {\n color: colors.$primary-mid;\n font-weight: bold;\n\n border: 1px dashed colors.$primary-mid;\n border-radius: s.spacing(3);\n\n background-color: transparent;\n\n &:hover:not(.is-disabled) {\n color: colors.$primary-accent-main;\n border: 1px dashed colors.$primary-accent-main;\n background-color: colors.$primary-accent-background;\n }\n }\n\n /* Sizes */\n &.sql-button--small {\n height: s.spacing(3);\n font-weight: 400;\n font-size: 12px;\n line-height: 14px;\n\n .slot-container {\n padding: 0 s.spacing(1);\n .icon-left {\n margin-right: 2px;\n }\n .icon-right {\n margin-left: 2px;\n }\n }\n\n .sql-spinner .spinner {\n height: s.spacing(2);\n }\n }\n\n &.sql-button--small-square {\n height: s.spacing(3);\n font-weight: 400;\n font-size: 12px;\n line-height: 15px;\n\n .slot-container {\n padding: 4px;\n }\n }\n\n &.sql-button--small-square-no-padding {\n height: s.spacing(3);\n font-weight: 400;\n font-size: 12px;\n line-height: 15px;\n\n .slot-container {\n padding: 0;\n }\n }\n\n &.sql-button--medium {\n height: s.spacing(4);\n\n .slot-container {\n padding: 0 12px;\n .icon-left {\n margin-right: 2px;\n }\n .icon-right {\n margin-left: 2px;\n }\n }\n }\n\n &.sql-button--medium-square {\n height: s.spacing(4);\n .slot-container {\n padding: 6px;\n }\n }\n\n &.sql-button--large {\n height: 36px;\n\n .slot-container {\n padding: 0 s.spacing(2);\n .icon-left {\n margin-right: 4px;\n }\n .icon-right {\n margin-left: 4px;\n }\n }\n }\n\n &.sql-button--large-square {\n height: 36px;\n .slot-container {\n padding: s.spacing(1);\n }\n }\n\n &.sql-button--xlarge {\n height: s.spacing(6);\n\n .slot-container {\n padding: 0 22px;\n .icon-left {\n margin-right: 4px;\n }\n .icon-right {\n margin-left: 4px;\n }\n }\n }\n\n &.sql-button--xlarge-square {\n height: s.spacing(6);\n .slot-container {\n padding: s.spacing(2);\n }\n }\n }\n</style>\n"],"names":["SQL_BUTTON_TYPES","SQL_BUTTON_SIZES","SQL_BUTTON_NATIVE_TYPES","SQL_SPINNER_THEME_MODES","SQL_SPINNER_SIZES","props","__props","hasLabel","computed","_createElementBlock","_normalizeClass","_createElementVNode","_hoisted_2","_toDisplayString","CLICK","emit","__emit","spinnerType","handleClick","event","_createBlock","SqlSpinner","$slots","_openBlock","_renderSlot","_ctx"],"mappings":"uGACaA,EAAmB,CAC9B,QAAS,UACT,QAAS,SAMX,EAIaC,EAAmB,CAM9B,MAAO,OAIT,EAIaC,EAA0B,CACrC,OAAQ,QAGV,EAIaC,EAA0B,CACrC,MAAO,QACP,KAAM,MACR,EAGaC,EAAoB,CAE/B,OAAQ,QAEV,sOCpCE,MAAMC,EAAQC,EAgBRC,EAAWC,EAAAA,SAAS,IAAMH,EAAM,OAASA,EAAM,MAAM,OAAS,CAAC,8BAIrEI,EAAAA,mBAUO,OAAA,CATL,MAAKC,EAAAA,eAAA,CAAC,cAAa,CAAA,SACDJ,EAAA,IAAI,mBAAoBA,EAAA,IAAI,EAAA,CAAA,CAAA,EAC9C,KAAK,SACJ,aAAYC,EAAA,MAAWD,EAAA,MAAQ,OAC/B,YAAWC,EAAA,MAAQ,SAAc,OACjC,cAAaA,EAAA,MAAW,OAAS,MAAA,eAElCI,EAAAA,mBAAqB,OAAA,CAAf,MAAM,MAAA,EAAM,KAAA,EAAA,GACNJ,EAAA,qBAAZE,EAAAA,mBAAwD,OAAxDG,EAAwDC,EAAAA,gBAAfP,EAAA,KAAK,EAAA,CAAA,wJCrCrCQ,EAAQ,8aCiDnB,MAAMT,EAAQC,EAyBRS,EAAOC,EAIPC,EAAcT,EAAAA,SAAS,IAC3BH,EAAM,OAASL,EAAiB,QAC5BG,EAAwB,MACxBA,EAAwB,IAAA,EAG9B,SAASe,EAAYC,EAAmB,CAClCd,EAAM,UAAYA,EAAM,SAC5BU,EAAKD,EAAOK,CAAK,CACnB,6BAvFAV,EAAAA,mBAiCS,SAAA,CAhCP,wBAAM,aAAY,CAOFH,EAAA,oBAAsBA,EAAA,IAAI,GAAA,GAAeA,EAAA,oBAAsBA,EAAA,IAAI,GAAA,kBAAwCA,EAAA,sBAAgCA,EAAA,oBAA8BA,EAAA,kBAA4BA,EAAA,iBAA2BA,EAAA,0BAAoCA,EAAA,WAAQ,mBAAkCA,EAAA,QAAA,KAN7T,KAAMA,EAAA,WACN,SAAUA,EAAA,UAAYA,EAAA,QACtB,UAAWA,EAAA,UACX,YAAWA,EAAA,SAAW,OACtB,gBAAeA,EAAA,UAAYA,EAAA,SAAW,OACtC,eAAcA,EAAA,WAAQ,KAAA,CAAA,CAAcA,EAAA,SAAW,OAc/C,QAAOY,CAAA,GAGRP,EAAAA,mBAQO,OAAA,CARD,MAAKD,EAAAA,eAAA,CAAC,iBAAgB,CAAA,aAAyBJ,EAAA,QAAO,CAAA,CAAA,GAExCA,EAAA,uBAAlBc,EAAAA,YAAqEC,EAAA,OAA1C,MAAM,cAAe,KAAMJ,EAAA,KAAA,gDAG3CK,EAAAA,OAAO,SAAlBC,EAAAA,YAAAd,EAAAA,mBAEM,MAFNG,EAEM,CADJY,EAAAA,WAAQC,EAAA,OAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/ui/SqlSpinner/SqlSpinner.types.ts","../src/ui/SqlSpinner/SqlSpinner.vue","../src/ui/SqlButton/SqlButton.types.ts","../src/constants/events.ts","../src/ui/SqlButton/SqlButton.vue","../src/ui/BasicTable/BasicTable.types.ts","../src/ui/BasicTable/BasicTable.vue"],"sourcesContent":["// Tema del spinner (clases: theme-<mode>)\nexport const SQL_SPINNER_THEME_MODES = {\n LIGHT: 'light', // para fondos oscuros: spinner claro\n DARK: 'dark', // para fondos claros: spinner oscuro\n} as const;\nexport type SqlSpinnerThemeMode =\n (typeof SQL_SPINNER_THEME_MODES)[keyof typeof SQL_SPINNER_THEME_MODES];\n\n// Tamaños (clases: sql-spinner--<size>)\nexport const SQL_SPINNER_SIZES = {\n SMALL: 'small',\n MEDIUM: 'medium',\n LARGE: 'large',\n} as const;\nexport type SqlSpinnerSize = (typeof SQL_SPINNER_SIZES)[keyof typeof SQL_SPINNER_SIZES];\n","<script setup lang=\"ts\">\nimport { type PropType, computed } from 'vue';\nimport {\n SQL_SPINNER_SIZES,\n SQL_SPINNER_THEME_MODES,\n type SqlSpinnerSize,\n type SqlSpinnerThemeMode,\n} from './SqlSpinner.types';\n\nconst props = defineProps({\n type: {\n type: String as PropType<SqlSpinnerThemeMode>,\n default: SQL_SPINNER_THEME_MODES.DARK,\n },\n size: {\n type: String as PropType<SqlSpinnerSize>,\n default: SQL_SPINNER_SIZES.SMALL,\n },\n // Opcional: texto accesible (si no hay, marcamos aria-hidden)\n label: {\n type: String,\n default: '',\n },\n});\n\nconst hasLabel = computed(() => props.label && props.label.length > 0);\n</script>\n\n<template>\n <span\n class=\"sql-spinner\"\n :class=\"[`theme-${type}`, `sql-spinner--${size}`]\"\n role=\"status\"\n :aria-label=\"hasLabel ? label : undefined\"\n :aria-live=\"hasLabel ? 'polite' : undefined\"\n :aria-hidden=\"hasLabel ? undefined : 'true'\"\n >\n <span class=\"ring\" />\n <span v-if=\"hasLabel\" class=\"sr-only\">{{ label }}</span>\n </span>\n</template>\n\n<style lang=\"scss\" scoped>\n@use '../../assets/css/colors.scss' as colors;\n\n/* Accesibilidad (solo-lectura visual) */\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n\n@keyframes sql-spin {\n to {\n transform: rotate(1turn);\n }\n}\n\n.sql-spinner {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n\n /* color del anillo por tema (paridad con los PNG de frontend-app) */\n --sql-spinner-color: #{colors.$primary-accent-main};\n\n /* Tamaños (paridad con frontend-app: small=20, medium=36, large=64) */\n &.sql-spinner--small {\n width: 20px;\n height: 20px;\n }\n &.sql-spinner--medium {\n width: 36px;\n height: 36px;\n }\n &.sql-spinner--large {\n width: 64px;\n height: 64px;\n }\n\n .ring {\n box-sizing: border-box;\n width: 100%;\n height: 100%;\n border-radius: 50%;\n\n /* Anillo con gradiente cónico transparente → color (arco que se desvanece) */\n background: conic-gradient(from 90deg, transparent 8%, var(--sql-spinner-color) 100%);\n\n /* Recorta el centro para dejar solo el anillo (grosor ~16% del radio ≈ 8% del diámetro,\n medido sobre los PNG de frontend-app) */\n mask: radial-gradient(farthest-side, transparent calc(100% - 16%), #000 calc(100% - 16%));\n /* stylelint-disable-next-line property-no-vendor-prefix */\n -webkit-mask: radial-gradient(\n farthest-side,\n transparent calc(100% - 16%),\n #000 calc(100% - 16%)\n );\n\n animation: sql-spin 1s linear infinite;\n }\n\n /* Temas */\n &.theme-dark {\n --sql-spinner-color: #{colors.$primary-accent-main};\n }\n &.theme-light {\n --sql-spinner-color: #{colors.$white};\n }\n}\n</style>\n","// Tipos de botón (clases: sql-button--<type>)\nexport const SQL_BUTTON_TYPES = {\n DEFAULT: 'default',\n PRIMARY: 'primary',\n SECONDARY: 'secondary',\n TERTIARY: 'tertiary',\n SPECIAL: 'special',\n SPECIAL2: 'special2',\n SPECIAL3: 'special3',\n DOTTED: 'dotted',\n DANGER: 'danger',\n GRADIENT: 'gradient',\n} as const;\nexport type SqlButtonType = (typeof SQL_BUTTON_TYPES)[keyof typeof SQL_BUTTON_TYPES];\n\n// Tamaños de botón (clases: sql-button--<size>)\nexport const SQL_BUTTON_SIZES = {\n SMALL: 'small',\n SMALL_SQUARE: 'small-square',\n SMALL_SQUARE_NO_PADDING: 'small-square-no-padding',\n MEDIUM: 'medium',\n MEDIUM_SQUARE: 'medium-square',\n LARGE: 'large',\n LARGE_SQUARE: 'large-square',\n XLARGE: 'xlarge',\n XLARGE_SQUARE: 'xlarge-square',\n} as const;\nexport type SqlButtonSize = (typeof SQL_BUTTON_SIZES)[keyof typeof SQL_BUTTON_SIZES];\n\n// type nativo del <button>\nexport const SQL_BUTTON_NATIVE_TYPES = {\n BUTTON: 'button',\n SUBMIT: 'submit',\n RESET: 'reset',\n} as const;\nexport type SqlButtonNativeType =\n (typeof SQL_BUTTON_NATIVE_TYPES)[keyof typeof SQL_BUTTON_NATIVE_TYPES];\n","// Evento genérico de click para props/emit\nexport const CLICK = 'click' as const;\nexport type ClickEventName = typeof CLICK;\n","<template>\n <button\n class=\"sql-button\"\n :type=\"nativeType\"\n :disabled=\"disabled || loading\"\n :autofocus=\"autofocus\"\n :aria-busy=\"loading || undefined\"\n :aria-disabled=\"disabled || loading || undefined\"\n :aria-pressed=\"selected !== null ? !!selected : undefined\"\n :class=\"[\n type ? `sql-button--${type}` : '',\n size ? `sql-button--${size}` : '',\n {\n 'is-disabled': disabled,\n 'is-loading': loading,\n 'is-circle': circle,\n 'is-plain': plain,\n 'is-round': round,\n 'selectable-button': selected !== null,\n 'is-selected': selected,\n },\n ]\"\n @click=\"handleClick\"\n >\n <!-- Siempre renderizamos el contenedor para que el spinner funcione con o sin texto -->\n <span class=\"slot-container\" :class=\"{ 'is-loading': loading }\">\n <!-- Spinner superpuesto cuando loading -->\n <SqlSpinner v-if=\"loading\" class=\"sql-spinner\" :type=\"spinnerType\" />\n\n <!-- Texto/slot (se oculta visualmente cuando loading) -->\n <div v-if=\"$slots.default\" class=\"slotted-content\">\n <slot />\n </div>\n </span>\n </button>\n</template>\n<script setup lang=\"ts\">\nimport { computed, type PropType } from 'vue';\nimport { SqlSpinner, SQL_SPINNER_THEME_MODES } from '@shared/ui/SqlSpinner';\nimport {\n SQL_BUTTON_NATIVE_TYPES,\n SQL_BUTTON_SIZES,\n SQL_BUTTON_TYPES,\n type SqlButtonNativeType,\n type SqlButtonSize,\n type SqlButtonType,\n} from './SqlButton.types';\nimport { CLICK } from '@shared/constants/events';\n\nconst props = defineProps({\n type: {\n type: String as PropType<SqlButtonType>,\n default: SQL_BUTTON_TYPES.DEFAULT,\n },\n size: {\n type: String as PropType<SqlButtonSize>,\n default: SQL_BUTTON_SIZES.LARGE,\n },\n nativeType: {\n type: String as PropType<SqlButtonNativeType>,\n default: SQL_BUTTON_NATIVE_TYPES.BUTTON,\n },\n selected: {\n type: Boolean as PropType<boolean | null>,\n default: null,\n },\n loading: Boolean,\n disabled: Boolean,\n plain: Boolean,\n autofocus: Boolean,\n round: Boolean,\n circle: Boolean,\n});\n\nconst emit = defineEmits<{\n (e: typeof CLICK, event: MouseEvent): void;\n}>();\n\nconst spinnerType = computed(() =>\n props.type === SQL_BUTTON_TYPES.PRIMARY || props.type === SQL_BUTTON_TYPES.DANGER\n ? SQL_SPINNER_THEME_MODES.LIGHT\n : SQL_SPINNER_THEME_MODES.DARK\n);\n\nfunction handleClick(event: MouseEvent) {\n if (props.disabled || props.loading) return; // guard\n emit(CLICK, event);\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@use '../../assets/css/colors.scss' as colors;\n@use '../../assets/css/spacing.scss' as s;\n\n/* keyframes a nivel raíz */\n@keyframes rotating {\n 0% {\n transform: rotateZ(360deg);\n }\n 100% {\n transform: rotateZ(0deg);\n }\n}\n\n$default-background: colors.$white;\n\n.sql-button {\n padding: 0;\n\n color: colors.$primary-main;\n font-weight: 500;\n font-size: 14px;\n line-height: 20px;\n\n border-width: 0;\n border-radius: 4px;\n outline: none;\n\n cursor: pointer;\n transition:\n background 0.2s,\n color 0.2s,\n border-color 0.2s;\n\n &:active,\n &:hover {\n outline: none;\n }\n\n &[disabled] {\n cursor: not-allowed;\n }\n\n &.is-circle {\n padding: s.spacing(1);\n border-radius: 50%;\n }\n\n .slot-container {\n position: relative;\n\n display: inline-flex;\n justify-content: center;\n align-items: center;\n\n .slotted-content {\n display: inline-flex;\n align-items: center;\n\n white-space: nowrap;\n }\n\n &.is-loading {\n .slotted-content {\n visibility: hidden;\n } /* el contenido sigue en el flujo para no cambiar ancho/alto */\n }\n\n .sql-spinner {\n position: absolute;\n inset: 0;\n\n display: flex;\n justify-content: center;\n align-items: center;\n\n width: 1em;\n height: 1em;\n margin: auto;\n\n pointer-events: none;\n }\n }\n\n /* Types */\n &.sql-button--default {\n color: colors.$primary-main;\n background-color: $default-background;\n\n &:hover {\n background-color: colors.$primary-tint;\n }\n\n &.is-disabled {\n color: colors.$primary-mid;\n background-color: $default-background;\n }\n }\n\n &.sql-button--primary {\n color: colors.$white;\n background-color: colors.$primary-accent-main;\n\n &:hover {\n background-color: colors.$primary-accent-shadow;\n }\n &.is-disabled {\n background-color: colors.$primary-accent-mid;\n }\n }\n\n &.sql-button--secondary {\n color: colors.$primary-main;\n background-color: colors.$secondary-background;\n\n &:hover {\n background-color: colors.$primary-tint;\n }\n &.is-disabled {\n color: colors.$primary-secondary-text;\n background-color: colors.$primary-tint;\n }\n }\n\n &.sql-button--tertiary {\n color: colors.$primary-main;\n background-color: $default-background;\n\n &:hover {\n background-color: colors.$primary-tint;\n }\n &:active {\n color: $default-background;\n background-color: colors.$primary-secondary-text;\n }\n &.is-disabled {\n color: colors.$primary-mid;\n background-color: $default-background;\n &:active {\n color: colors.$primary-mid;\n background-color: $default-background;\n }\n }\n\n &.selectable-button {\n &:active {\n color: colors.$primary-accent-main !important;\n background: colors.$primary-accent-background !important;\n }\n\n &.is-selected {\n color: colors.$primary-accent-main;\n border: 1px solid colors.$primary-accent-main;\n background: colors.$primary-accent-background;\n }\n }\n }\n\n &.sql-button--special {\n color: colors.$primary-accent-main;\n border: 1px solid colors.$primary-accent-mid;\n background-color: $default-background;\n\n &:hover {\n border: 1px solid colors.$primary-accent-main;\n }\n &:active {\n border: 1px solid colors.$primary-accent-main;\n background-color: colors.$primary-accent-background;\n }\n &.is-disabled {\n color: colors.$primary-accent-mid;\n border: 1px solid colors.$primary-accent-tint;\n background-color: $default-background;\n\n &:active {\n border: 1px solid colors.$primary-accent-tint;\n background-color: $default-background;\n }\n }\n }\n\n &.sql-button--special2 {\n color: colors.$primary-accent-main;\n background-color: $default-background;\n\n &:hover {\n background-color: colors.$primary-accent-background;\n }\n &:active {\n color: colors.$primary-accent-main;\n background-color: colors.$primary-accent-tint;\n }\n &.is-disabled {\n color: colors.$primary-accent-mid;\n background-color: colors.$primary-accent-background;\n &:active {\n color: colors.$primary-accent-mid;\n background-color: colors.$primary-accent-background;\n }\n }\n }\n\n &.sql-button--special3 {\n color: colors.$primary-accent-main;\n font-weight: 400;\n\n background-color: colors.$primary-accent-tint;\n\n &:hover {\n color: colors.$white;\n background-color: colors.$primary-accent-main;\n }\n &:active {\n color: colors.$primary-accent-main;\n background-color: colors.$primary-accent-tint;\n }\n &.is-disabled {\n color: colors.$primary-accent-mid;\n background-color: colors.$primary-accent-background;\n &:active {\n color: colors.$primary-accent-mid;\n background-color: colors.$primary-accent-background;\n }\n }\n }\n\n &.sql-button--dotted {\n color: colors.$primary-mid;\n font-weight: bold;\n\n border: 1px dashed colors.$primary-mid;\n border-radius: s.spacing(3);\n\n background-color: transparent;\n\n &:hover:not(.is-disabled) {\n color: colors.$primary-accent-main;\n border: 1px dashed colors.$primary-accent-main;\n background-color: colors.$primary-accent-background;\n }\n }\n\n &.sql-button--danger {\n color: colors.$tertiary-accent-main !important;\n\n background-color: colors.$tertiary-accent-tint;\n\n &:hover {\n background-color: colors.$tertiary-accent-mid;\n }\n &.is-disabled {\n color: colors.$tertiary-accent-mid;\n background-color: colors.$tertiary-accent-tint;\n }\n }\n\n &.sql-button--gradient {\n color: colors.$white !important;\n\n background: linear-gradient(\n 106.21deg,\n colors.$ai-gradient-1 22.52%,\n colors.$ai-gradient-2 100%\n );\n\n &:hover {\n background: linear-gradient(\n 106deg,\n colors.$ai-gradient-hover 22.52%,\n colors.$ai-gradient-2 100%\n ) !important;\n }\n &.is-disabled {\n background: linear-gradient(\n 106deg,\n colors.$ai-gradient-disabled 22.52%,\n colors.$ai-gradient-2 100%\n );\n }\n }\n\n /* Sizes */\n &.sql-button--small {\n height: s.spacing(3);\n font-weight: 400;\n font-size: 12px;\n line-height: 14px;\n\n .slot-container {\n padding: 0 s.spacing(1);\n .icon-left {\n margin-right: 2px;\n }\n .icon-right {\n margin-left: 2px;\n }\n }\n\n .sql-spinner .spinner {\n height: s.spacing(2);\n }\n }\n\n &.sql-button--small-square {\n height: s.spacing(3);\n font-weight: 400;\n font-size: 12px;\n line-height: 15px;\n\n .slot-container {\n padding: 4px;\n }\n }\n\n &.sql-button--small-square-no-padding {\n width: s.spacing(3);\n height: s.spacing(3);\n font-weight: 400;\n font-size: 12px;\n line-height: 15px;\n\n .slot-container {\n padding: 0;\n }\n }\n\n &.sql-button--medium {\n height: s.spacing(4);\n\n .slot-container {\n padding: 0 12px;\n .icon-left {\n margin-right: 2px;\n }\n .icon-right {\n margin-left: 2px;\n }\n }\n }\n\n &.sql-button--medium-square {\n height: s.spacing(4);\n .slot-container {\n padding: 6px;\n }\n }\n\n &.sql-button--large {\n height: 36px;\n\n .slot-container {\n padding: 0 s.spacing(2);\n .icon-left {\n margin-right: 4px;\n }\n .icon-right {\n margin-left: 4px;\n }\n }\n }\n\n &.sql-button--large-square {\n height: 36px;\n .slot-container {\n padding: s.spacing(1);\n }\n }\n\n &.sql-button--xlarge {\n height: s.spacing(6);\n\n .slot-container {\n padding: 0 22px;\n .icon-left {\n margin-right: 4px;\n }\n .icon-right {\n margin-left: 4px;\n }\n }\n }\n\n &.sql-button--xlarge-square {\n height: s.spacing(6);\n .slot-container {\n padding: s.spacing(2);\n }\n }\n}\n</style>\n","// Alineación de una columna (clases: basic-table__th--<align> / __td--<align>)\nexport const BASIC_TABLE_ALIGN = {\n LEFT: 'left',\n CENTER: 'center',\n RIGHT: 'right',\n} as const;\nexport type BasicTableAlign = (typeof BASIC_TABLE_ALIGN)[keyof typeof BASIC_TABLE_ALIGN];\n\n// Definición de una columna. `key` mapea a la propiedad de la row para el\n// contenido por defecto y da nombre al slot scoped `cell-<key>`.\nexport interface BasicTableColumn {\n key: string;\n label: string;\n align?: BasicTableAlign;\n width?: string;\n}\n\n// Row genérica: sólo se exige un `id` estable para el :key; el resto de las\n// propiedades las consume cada columna vía su `key`.\nexport interface BasicTableRow {\n id: string | number;\n [key: string]: unknown;\n}\n","<script setup lang=\"ts\">\nimport { type PropType } from 'vue';\nimport { BASIC_TABLE_ALIGN, type BasicTableColumn, type BasicTableRow } from './BasicTable.types';\n\ndefineProps({\n columns: {\n type: Array as PropType<BasicTableColumn[]>,\n required: true,\n },\n rows: {\n type: Array as PropType<BasicTableRow[]>,\n required: true,\n },\n emptyMessage: {\n type: String,\n default: '',\n },\n});\n</script>\n\n<template>\n <div class=\"basic-table\">\n <div class=\"basic-table__wrapper\">\n <table class=\"basic-table__table\">\n <thead>\n <tr>\n <th\n v-for=\"column in columns\"\n :key=\"column.key\"\n :class=\"`basic-table__th--${column.align ?? BASIC_TABLE_ALIGN.LEFT}`\"\n :style=\"column.width ? { width: column.width } : undefined\"\n >\n {{ column.label }}\n </th>\n </tr>\n </thead>\n <tbody>\n <tr v-if=\"rows.length === 0\">\n <td\n class=\"basic-table__empty\"\n :colspan=\"columns.length\"\n data-testid=\"basic-table-empty\"\n >\n <slot name=\"empty\">{{ emptyMessage }}</slot>\n </td>\n </tr>\n <tr v-for=\"row in rows\" :key=\"row.id\" data-testid=\"basic-table-row\">\n <td\n v-for=\"column in columns\"\n :key=\"column.key\"\n :class=\"`basic-table__td--${column.align ?? BASIC_TABLE_ALIGN.LEFT}`\"\n >\n <slot :name=\"`cell-${column.key}`\" :row=\"row\">{{ row[column.key] }}</slot>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use '../../assets/css/colors.scss' as colors;\n@use '../../assets/css/spacing.scss' as s;\n@use '../../assets/css/font-size.scss' as f;\n\n.basic-table {\n &__wrapper {\n border: 1px solid colors.$primary-tint;\n border-radius: 8px;\n\n overflow-x: auto;\n }\n\n &__table {\n width: 100%;\n\n border-collapse: collapse;\n\n // Own every border/height explicitly so the table stays consistent even\n // when embedded in a host app whose global `table td/th` rules would\n // otherwise leak in. The scoped specificity (block + [data-v]) beats them.\n th {\n padding: s.spacing(1) s.spacing(2);\n\n color: colors.$primary-main;\n font-weight: 700;\n font-size: f.font-size('text');\n\n border: 0;\n border-bottom: 1px solid colors.$primary-tint;\n\n background-color: colors.$primary-background;\n }\n\n td {\n height: auto;\n padding: s.spacing(2);\n\n color: colors.$primary-main;\n font-size: f.font-size('text');\n\n border: 0;\n }\n\n tr {\n border: 0;\n }\n\n // Row separator only BETWEEN adjacent body rows: empty/single → none.\n tbody tr + tr {\n border-top: 1px solid colors.$primary-tint;\n }\n }\n\n // Alignment modifiers are always emitted, so each owns its text-align and\n // no base `th` text-align competes on specificity.\n &__th--left,\n &__td--left {\n text-align: left;\n }\n\n &__th--center,\n &__td--center {\n text-align: center;\n }\n\n &__th--right,\n &__td--right {\n text-align: right;\n }\n\n &__empty {\n padding: s.spacing(5) s.spacing(3);\n\n color: colors.$primary-secondary-text;\n text-align: center;\n }\n}\n</style>\n"],"names":["SQL_SPINNER_THEME_MODES","SQL_SPINNER_SIZES","props","__props","hasLabel","computed","_createElementBlock","_normalizeClass","_createElementVNode","_hoisted_2","_toDisplayString","SQL_BUTTON_TYPES","SQL_BUTTON_SIZES","SQL_BUTTON_NATIVE_TYPES","CLICK","emit","__emit","spinnerType","handleClick","event","_createBlock","_unref","SqlSpinner","$slots","_openBlock","_renderSlot","_ctx","BASIC_TABLE_ALIGN","_hoisted_1","_hoisted_3","_Fragment","_renderList","column","_a","_normalizeStyle","_hoisted_4","row"],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import './assets/css/base.scss';
|
|
2
|
+
export { SqlButton } from './ui/SqlButton';
|
|
3
|
+
export { SQL_BUTTON_TYPES, SQL_BUTTON_SIZES, SQL_BUTTON_NATIVE_TYPES } from './ui/SqlButton';
|
|
4
|
+
export type { SqlButtonType, SqlButtonSize, SqlButtonNativeType } from './ui/SqlButton';
|
|
5
|
+
export { SqlSpinner } from './ui/SqlSpinner';
|
|
6
|
+
export { SQL_SPINNER_THEME_MODES, SQL_SPINNER_SIZES } from './ui/SqlSpinner';
|
|
7
|
+
export type { SqlSpinnerThemeMode, SqlSpinnerSize } from './ui/SqlSpinner';
|
|
8
|
+
export { BasicTable, BASIC_TABLE_ALIGN } from './ui/BasicTable';
|
|
9
|
+
export type { BasicTableColumn, BasicTableRow, BasicTableAlign } from './ui/BasicTable';
|
package/dist/index.es.js
CHANGED
|
@@ -1,31 +1,26 @@
|
|
|
1
|
-
import { defineComponent as
|
|
2
|
-
const
|
|
3
|
-
DEFAULT: "default",
|
|
4
|
-
PRIMARY: "primary"
|
|
5
|
-
}, B = {
|
|
6
|
-
LARGE: "large"
|
|
7
|
-
}, E = {
|
|
8
|
-
BUTTON: "button"
|
|
9
|
-
}, u = {
|
|
1
|
+
import { defineComponent as L, computed as h, openBlock as s, createElementBlock as n, normalizeClass as o, createElementVNode as d, toDisplayString as u, createCommentVNode as y, createBlock as I, unref as g, renderSlot as A, Fragment as b, renderList as S, normalizeStyle as v, createTextVNode as R } from "vue";
|
|
2
|
+
const T = {
|
|
10
3
|
LIGHT: "light",
|
|
11
|
-
// para
|
|
4
|
+
// para fondos oscuros: spinner claro
|
|
12
5
|
DARK: "dark"
|
|
13
|
-
// para
|
|
14
|
-
},
|
|
15
|
-
|
|
16
|
-
|
|
6
|
+
// para fondos claros: spinner oscuro
|
|
7
|
+
}, B = {
|
|
8
|
+
SMALL: "small",
|
|
9
|
+
MEDIUM: "medium",
|
|
10
|
+
LARGE: "large"
|
|
11
|
+
}, N = ["aria-label", "aria-live", "aria-hidden"], k = {
|
|
17
12
|
key: 0,
|
|
18
13
|
class: "sr-only"
|
|
19
|
-
},
|
|
14
|
+
}, D = /* @__PURE__ */ L({
|
|
20
15
|
__name: "SqlSpinner",
|
|
21
16
|
props: {
|
|
22
17
|
type: {
|
|
23
18
|
type: String,
|
|
24
|
-
default:
|
|
19
|
+
default: T.DARK
|
|
25
20
|
},
|
|
26
21
|
size: {
|
|
27
22
|
type: String,
|
|
28
|
-
default:
|
|
23
|
+
default: B.SMALL
|
|
29
24
|
},
|
|
30
25
|
// Opcional: texto accesible (si no hay, marcamos aria-hidden)
|
|
31
26
|
label: {
|
|
@@ -34,40 +29,65 @@ const r = {
|
|
|
34
29
|
}
|
|
35
30
|
},
|
|
36
31
|
setup(e) {
|
|
37
|
-
const
|
|
38
|
-
return (
|
|
39
|
-
class:
|
|
32
|
+
const i = e, l = h(() => i.label && i.label.length > 0);
|
|
33
|
+
return (t, a) => (s(), n("span", {
|
|
34
|
+
class: o(["sql-spinner", [`theme-${e.type}`, `sql-spinner--${e.size}`]]),
|
|
40
35
|
role: "status",
|
|
41
|
-
"aria-label":
|
|
42
|
-
"aria-live":
|
|
43
|
-
"aria-hidden":
|
|
36
|
+
"aria-label": l.value ? e.label : void 0,
|
|
37
|
+
"aria-live": l.value ? "polite" : void 0,
|
|
38
|
+
"aria-hidden": l.value ? void 0 : "true"
|
|
44
39
|
}, [
|
|
45
|
-
a[0] || (a[0] =
|
|
46
|
-
|
|
47
|
-
], 10,
|
|
40
|
+
a[0] || (a[0] = d("span", { class: "ring" }, null, -1)),
|
|
41
|
+
l.value ? (s(), n("span", k, u(e.label), 1)) : y("", !0)
|
|
42
|
+
], 10, N));
|
|
48
43
|
}
|
|
49
|
-
}),
|
|
50
|
-
const
|
|
51
|
-
for (const [
|
|
52
|
-
t
|
|
53
|
-
return
|
|
54
|
-
},
|
|
44
|
+
}), m = (e, i) => {
|
|
45
|
+
const l = e.__vccOpts || e;
|
|
46
|
+
for (const [t, a] of i)
|
|
47
|
+
l[t] = a;
|
|
48
|
+
return l;
|
|
49
|
+
}, M = /* @__PURE__ */ m(D, [["__scopeId", "data-v-9694500e"]]), E = {
|
|
50
|
+
DEFAULT: "default",
|
|
51
|
+
PRIMARY: "primary",
|
|
52
|
+
SECONDARY: "secondary",
|
|
53
|
+
TERTIARY: "tertiary",
|
|
54
|
+
SPECIAL: "special",
|
|
55
|
+
SPECIAL2: "special2",
|
|
56
|
+
SPECIAL3: "special3",
|
|
57
|
+
DOTTED: "dotted",
|
|
58
|
+
DANGER: "danger",
|
|
59
|
+
GRADIENT: "gradient"
|
|
60
|
+
}, q = {
|
|
61
|
+
SMALL: "small",
|
|
62
|
+
SMALL_SQUARE: "small-square",
|
|
63
|
+
SMALL_SQUARE_NO_PADDING: "small-square-no-padding",
|
|
64
|
+
MEDIUM: "medium",
|
|
65
|
+
MEDIUM_SQUARE: "medium-square",
|
|
66
|
+
LARGE: "large",
|
|
67
|
+
LARGE_SQUARE: "large-square",
|
|
68
|
+
XLARGE: "xlarge",
|
|
69
|
+
XLARGE_SQUARE: "xlarge-square"
|
|
70
|
+
}, $ = {
|
|
71
|
+
BUTTON: "button",
|
|
72
|
+
SUBMIT: "submit",
|
|
73
|
+
RESET: "reset"
|
|
74
|
+
}, p = "click", U = ["type", "disabled", "autofocus", "aria-busy", "aria-disabled", "aria-pressed"], G = {
|
|
55
75
|
key: 1,
|
|
56
76
|
class: "slotted-content"
|
|
57
|
-
},
|
|
77
|
+
}, C = /* @__PURE__ */ L({
|
|
58
78
|
__name: "SqlButton",
|
|
59
79
|
props: {
|
|
60
80
|
type: {
|
|
61
81
|
type: String,
|
|
62
|
-
default:
|
|
82
|
+
default: E.DEFAULT
|
|
63
83
|
},
|
|
64
84
|
size: {
|
|
65
85
|
type: String,
|
|
66
|
-
default:
|
|
86
|
+
default: q.LARGE
|
|
67
87
|
},
|
|
68
88
|
nativeType: {
|
|
69
89
|
type: String,
|
|
70
|
-
default:
|
|
90
|
+
default: $.BUTTON
|
|
71
91
|
},
|
|
72
92
|
selected: {
|
|
73
93
|
type: Boolean,
|
|
@@ -80,15 +100,15 @@ const r = {
|
|
|
80
100
|
round: Boolean,
|
|
81
101
|
circle: Boolean
|
|
82
102
|
},
|
|
83
|
-
setup(e, { emit:
|
|
84
|
-
const
|
|
85
|
-
() =>
|
|
103
|
+
setup(e, { emit: i }) {
|
|
104
|
+
const l = e, t = i, a = h(
|
|
105
|
+
() => l.type === E.PRIMARY || l.type === E.DANGER ? T.LIGHT : T.DARK
|
|
86
106
|
);
|
|
87
|
-
function
|
|
88
|
-
|
|
107
|
+
function r(c) {
|
|
108
|
+
l.disabled || l.loading || t(p, c);
|
|
89
109
|
}
|
|
90
|
-
return (
|
|
91
|
-
class:
|
|
110
|
+
return (c, F) => (s(), n("button", {
|
|
111
|
+
class: o(["sql-button", [
|
|
92
112
|
e.type ? `sql-button--${e.type}` : "",
|
|
93
113
|
e.size ? `sql-button--${e.size}` : "",
|
|
94
114
|
{
|
|
@@ -107,25 +127,101 @@ const r = {
|
|
|
107
127
|
"aria-busy": e.loading || void 0,
|
|
108
128
|
"aria-disabled": e.disabled || e.loading || void 0,
|
|
109
129
|
"aria-pressed": e.selected !== null ? !!e.selected : void 0,
|
|
110
|
-
onClick:
|
|
130
|
+
onClick: r
|
|
111
131
|
}, [
|
|
112
|
-
|
|
113
|
-
class:
|
|
132
|
+
d("span", {
|
|
133
|
+
class: o(["slot-container", { "is-loading": e.loading }])
|
|
114
134
|
}, [
|
|
115
|
-
e.loading ? (
|
|
135
|
+
e.loading ? (s(), I(g(M), {
|
|
116
136
|
key: 0,
|
|
117
137
|
class: "sql-spinner",
|
|
118
138
|
type: a.value
|
|
119
|
-
}, null, 8, ["type"])) :
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
])) :
|
|
139
|
+
}, null, 8, ["type"])) : y("", !0),
|
|
140
|
+
c.$slots.default ? (s(), n("div", G, [
|
|
141
|
+
A(c.$slots, "default", {}, void 0, !0)
|
|
142
|
+
])) : y("", !0)
|
|
123
143
|
], 2)
|
|
124
|
-
], 10,
|
|
144
|
+
], 10, U));
|
|
145
|
+
}
|
|
146
|
+
}), x = /* @__PURE__ */ m(C, [["__scopeId", "data-v-9eeb1a72"]]), f = {
|
|
147
|
+
LEFT: "left",
|
|
148
|
+
CENTER: "center",
|
|
149
|
+
RIGHT: "right"
|
|
150
|
+
}, O = { class: "basic-table" }, P = { class: "basic-table__wrapper" }, Q = { class: "basic-table__table" }, _ = { key: 0 }, z = ["colspan"], w = /* @__PURE__ */ L({
|
|
151
|
+
__name: "BasicTable",
|
|
152
|
+
props: {
|
|
153
|
+
columns: {
|
|
154
|
+
type: Array,
|
|
155
|
+
required: !0
|
|
156
|
+
},
|
|
157
|
+
rows: {
|
|
158
|
+
type: Array,
|
|
159
|
+
required: !0
|
|
160
|
+
},
|
|
161
|
+
emptyMessage: {
|
|
162
|
+
type: String,
|
|
163
|
+
default: ""
|
|
164
|
+
}
|
|
165
|
+
},
|
|
166
|
+
setup(e) {
|
|
167
|
+
return (i, l) => (s(), n("div", O, [
|
|
168
|
+
d("div", P, [
|
|
169
|
+
d("table", Q, [
|
|
170
|
+
d("thead", null, [
|
|
171
|
+
d("tr", null, [
|
|
172
|
+
(s(!0), n(b, null, S(e.columns, (t) => {
|
|
173
|
+
var a;
|
|
174
|
+
return s(), n("th", {
|
|
175
|
+
key: t.key,
|
|
176
|
+
class: o(`basic-table__th--${(a = t.align) != null ? a : g(f).LEFT}`),
|
|
177
|
+
style: v(t.width ? { width: t.width } : void 0)
|
|
178
|
+
}, u(t.label), 7);
|
|
179
|
+
}), 128))
|
|
180
|
+
])
|
|
181
|
+
]),
|
|
182
|
+
d("tbody", null, [
|
|
183
|
+
e.rows.length === 0 ? (s(), n("tr", _, [
|
|
184
|
+
d("td", {
|
|
185
|
+
class: "basic-table__empty",
|
|
186
|
+
colspan: e.columns.length,
|
|
187
|
+
"data-testid": "basic-table-empty"
|
|
188
|
+
}, [
|
|
189
|
+
A(i.$slots, "empty", {}, () => [
|
|
190
|
+
R(u(e.emptyMessage), 1)
|
|
191
|
+
], !0)
|
|
192
|
+
], 8, z)
|
|
193
|
+
])) : y("", !0),
|
|
194
|
+
(s(!0), n(b, null, S(e.rows, (t) => (s(), n("tr", {
|
|
195
|
+
key: t.id,
|
|
196
|
+
"data-testid": "basic-table-row"
|
|
197
|
+
}, [
|
|
198
|
+
(s(!0), n(b, null, S(e.columns, (a) => {
|
|
199
|
+
var r;
|
|
200
|
+
return s(), n("td", {
|
|
201
|
+
key: a.key,
|
|
202
|
+
class: o(`basic-table__td--${(r = a.align) != null ? r : g(f).LEFT}`)
|
|
203
|
+
}, [
|
|
204
|
+
A(i.$slots, `cell-${a.key}`, { row: t }, () => [
|
|
205
|
+
R(u(t[a.key]), 1)
|
|
206
|
+
], !0)
|
|
207
|
+
], 2);
|
|
208
|
+
}), 128))
|
|
209
|
+
]))), 128))
|
|
210
|
+
])
|
|
211
|
+
])
|
|
212
|
+
])
|
|
213
|
+
]));
|
|
125
214
|
}
|
|
126
|
-
}),
|
|
215
|
+
}), H = /* @__PURE__ */ m(w, [["__scopeId", "data-v-8f713759"]]);
|
|
127
216
|
export {
|
|
128
|
-
|
|
129
|
-
|
|
217
|
+
f as BASIC_TABLE_ALIGN,
|
|
218
|
+
H as BasicTable,
|
|
219
|
+
$ as SQL_BUTTON_NATIVE_TYPES,
|
|
220
|
+
q as SQL_BUTTON_SIZES,
|
|
221
|
+
E as SQL_BUTTON_TYPES,
|
|
222
|
+
B as SQL_SPINNER_SIZES,
|
|
223
|
+
T as SQL_SPINNER_THEME_MODES,
|
|
224
|
+
x as SqlButton,
|
|
225
|
+
M as SqlSpinner
|
|
130
226
|
};
|
|
131
227
|
//# sourceMappingURL=index.es.js.map
|
package/dist/index.es.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es.js","sources":["../src/constants/sql-components.ts","../src/components/SqlSpinner.vue","../src/constants/events.ts","../src/components/SqlButton.vue"],"sourcesContent":["// Tipos de botón (clases: sql-button--<type>)\nexport const SQL_BUTTON_TYPES = {\n DEFAULT: 'default',\n PRIMARY: 'primary',\n SECONDARY: 'secondary',\n TERTIARY: 'tertiary',\n SPECIAL: 'special',\n SPECIAL2: 'special2',\n DOTTED: 'dotted',\n} as const\nexport type SqlButtonType = typeof SQL_BUTTON_TYPES[keyof typeof SQL_BUTTON_TYPES]\n\n// Tamaños de botón (clases: sql-button--<size>)\nexport const SQL_BUTTON_SIZES = {\n SMALL: 'small',\n SMALL_SQUARE: 'small-square',\n SMALL_SQUARE_NO_PADDING: 'small-square-no-padding',\n MEDIUM: 'medium',\n MEDIUM_SQUARE: 'medium-square',\n LARGE: 'large',\n LARGE_SQUARE: 'large-square',\n XLARGE: 'xlarge',\n XLARGE_SQUARE: 'xlarge-square',\n} as const\nexport type SqlButtonSize = typeof SQL_BUTTON_SIZES[keyof typeof SQL_BUTTON_SIZES]\n\n// type nativo del <button>\nexport const SQL_BUTTON_NATIVE_TYPES = {\n BUTTON: 'button',\n SUBMIT: 'submit',\n RESET: 'reset',\n} as const\nexport type SqlButtonNativeType = typeof SQL_BUTTON_NATIVE_TYPES[keyof typeof SQL_BUTTON_NATIVE_TYPES]\n\n// Tema del spinner (lo usas en el computed del botón)\nexport const SQL_SPINNER_THEME_MODES = {\n LIGHT: 'light', // para botones oscuros: spinner claro\n DARK: 'dark', // para botones claros: spinner oscuro\n} as const\nexport type SqlSpinnerThemeMode = typeof SQL_SPINNER_THEME_MODES[keyof typeof SQL_SPINNER_THEME_MODES]\n\nexport const SQL_SPINNER_SIZES = {\n SMALL: 'small',\n MEDIUM: 'medium',\n LARGE: 'large',\n} as const;\n\nexport type SqlSpinnerSize = (typeof SQL_SPINNER_SIZES)[keyof typeof SQL_SPINNER_SIZES];\n","<script setup lang=\"ts\">\n import { type PropType, computed } from \"vue\";\n import {\n SQL_SPINNER_SIZES,\n SQL_SPINNER_THEME_MODES,\n type SqlSpinnerSize,\n type SqlSpinnerThemeMode,\n } from \"../constants/sql-components\";\n\n const props = defineProps({\n type: {\n type: String as PropType<SqlSpinnerThemeMode>,\n default: SQL_SPINNER_THEME_MODES.DARK,\n },\n size: {\n type: String as PropType<SqlSpinnerSize>,\n default: SQL_SPINNER_SIZES.MEDIUM,\n },\n // Opcional: texto accesible (si no hay, marcamos aria-hidden)\n label: {\n type: String,\n default: \"\",\n },\n });\n\n const hasLabel = computed(() => props.label && props.label.length > 0);\n</script>\n\n<template>\n <span\n class=\"sql-spinner\"\n :class=\"[`theme-${type}`, `sql-spinner--${size}`]\"\n role=\"status\"\n :aria-label=\"hasLabel ? label : undefined\"\n :aria-live=\"hasLabel ? 'polite' : undefined\"\n :aria-hidden=\"hasLabel ? undefined : 'true'\"\n >\n <span class=\"ring\" />\n <span v-if=\"hasLabel\" class=\"sr-only\">{{ label }}</span>\n </span>\n</template>\n\n<style lang=\"scss\" scoped>\n @use \"../assets/css/colors.scss\" as colors;\n\n /* Accesibilidad (solo-lectura visual) */\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n }\n\n @keyframes sql-spin {\n to {\n transform: rotate(360deg);\n }\n }\n\n .sql-spinner {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n\n /* Tamaños por clase */\n &.sql-spinner--small {\n width: 12px;\n height: 12px;\n }\n &.sql-spinner--medium {\n width: 16px;\n height: 16px;\n }\n &.sql-spinner--large {\n width: 24px;\n height: 24px;\n }\n\n .ring {\n box-sizing: border-box;\n width: 100%;\n height: 100%;\n border-radius: 50%;\n border-style: solid;\n border-width: 2px;\n animation: sql-spin 0.8s linear infinite;\n }\n\n /* Temas */\n &.theme-light .ring {\n /* 3 lados visibles, 1 transparente para efecto “spinner” */\n border-color: colors.$white colors.$white colors.$white transparent;\n }\n\n &.theme-dark .ring {\n border-color: colors.$primary-main colors.$primary-main\n colors.$primary-main transparent;\n }\n }\n</style>\n","// Evento genérico de click para props/emit\nexport const CLICK = 'click' as const\nexport type ClickEventName = typeof CLICK\n","<template>\n <button\n class=\"sql-button\"\n :type=\"nativeType\"\n :disabled=\"disabled || loading\"\n :autofocus=\"autofocus\"\n :aria-busy=\"loading || undefined\"\n :aria-disabled=\"disabled || loading || undefined\"\n :aria-pressed=\"selected !== null ? !!selected : undefined\"\n :class=\"[\n type ? `sql-button--${type}` : '',\n size ? `sql-button--${size}` : '',\n {\n 'is-disabled': disabled,\n 'is-loading': loading,\n 'is-circle': circle,\n 'is-plain': plain,\n 'is-round': round,\n 'selectable-button': selected !== null,\n 'is-selected': selected,\n },\n ]\"\n @click=\"handleClick\"\n >\n <!-- Siempre renderizamos el contenedor para que el spinner funcione con o sin texto -->\n <span class=\"slot-container\" :class=\"{ 'is-loading': loading }\">\n <!-- Spinner superpuesto cuando loading -->\n <SqlSpinner v-if=\"loading\" class=\"sql-spinner\" :type=\"spinnerType\" />\n\n <!-- Texto/slot (se oculta visualmente cuando loading) -->\n <div v-if=\"$slots.default\" class=\"slotted-content\">\n <slot />\n </div>\n </span>\n </button>\n</template>\n<script setup lang=\"ts\">\n import { computed, type PropType } from \"vue\";\n import SqlSpinner from \"@shared/components/SqlSpinner.vue\";\n import {\n SQL_BUTTON_NATIVE_TYPES,\n SQL_BUTTON_SIZES,\n SQL_BUTTON_TYPES,\n SQL_SPINNER_THEME_MODES,\n type SqlButtonNativeType,\n type SqlButtonSize,\n type SqlButtonType,\n } from \"@shared/constants/sql-components\";\n import { CLICK } from \"@shared/constants/events\";\n\n const props = defineProps({\n type: {\n type: String as PropType<SqlButtonType>,\n default: SQL_BUTTON_TYPES.DEFAULT,\n },\n size: {\n type: String as PropType<SqlButtonSize>,\n default: SQL_BUTTON_SIZES.LARGE,\n },\n nativeType: {\n type: String as PropType<SqlButtonNativeType>,\n default: SQL_BUTTON_NATIVE_TYPES.BUTTON,\n },\n selected: {\n type: Boolean as PropType<boolean | null>,\n default: null,\n },\n loading: Boolean,\n disabled: Boolean,\n plain: Boolean,\n autofocus: Boolean,\n round: Boolean,\n circle: Boolean,\n });\n\n const emit = defineEmits<{\n (e: typeof CLICK, event: MouseEvent): void;\n }>();\n\n const spinnerType = computed(() =>\n props.type === SQL_BUTTON_TYPES.PRIMARY\n ? SQL_SPINNER_THEME_MODES.LIGHT\n : SQL_SPINNER_THEME_MODES.DARK\n );\n\n function handleClick(event: MouseEvent) {\n if (props.disabled || props.loading) return; // guard\n emit(CLICK, event);\n }\n</script>\n\n<style lang=\"scss\" scoped>\n @use \"../assets/css/colors.scss\" as colors;\n @use \"../assets/css/spacing.scss\" as s;\n\n /* keyframes a nivel raíz */\n @keyframes rotating {\n 0% {\n transform: rotateZ(360deg);\n }\n 100% {\n transform: rotateZ(0deg);\n }\n }\n\n $default-background: colors.$white;\n\n .sql-button {\n padding: 0;\n\n color: colors.$primary-main;\n font-weight: 500;\n font-size: 14px;\n line-height: 20px;\n\n border-width: 0;\n border-radius: 4px;\n outline: none;\n\n cursor: pointer;\n transition: background 0.2s, color 0.2s, border-color 0.2s;\n\n &:active,\n &:hover {\n outline: none;\n }\n\n &[disabled] {\n cursor: not-allowed;\n }\n\n &.is-circle {\n padding: s.spacing(1);\n border-radius: 50%;\n }\n\n .slot-container {\n position: relative;\n\n display: inline-flex;\n justify-content: center;\n align-items: center;\n\n .slotted-content {\n display: inline-flex;\n align-items: center;\n }\n\n &.is-loading {\n .slotted-content {\n visibility: hidden;\n } /* el contenido sigue en el flujo para no cambiar ancho/alto */\n }\n\n .sql-spinner {\n position: absolute;\n inset: 0;\n\n display: flex;\n justify-content: center;\n align-items: center;\n\n width: 1em;\n height: 1em;\n margin: auto;\n\n pointer-events: none;\n }\n }\n\n /* Types */\n &.sql-button--default {\n color: colors.$primary-main;\n background-color: $default-background;\n\n &:hover {\n background-color: colors.$primary-tint;\n }\n\n &.is-disabled {\n color: colors.$primary-mid;\n background-color: $default-background;\n }\n }\n\n &.sql-button--primary {\n color: colors.$white;\n background-color: colors.$primary-accent-main;\n\n &:hover {\n background-color: colors.$primary-accent-shadow;\n }\n &.is-disabled {\n background-color: colors.$primary-accent-mid;\n }\n }\n\n &.sql-button--secondary {\n color: colors.$primary-main;\n background-color: colors.$secondary-background;\n\n &:hover {\n background-color: colors.$primary-tint;\n }\n &.is-disabled {\n color: colors.$primary-secondary-text;\n background-color: colors.$primary-tint;\n }\n }\n\n &.sql-button--tertiary {\n color: colors.$primary-main;\n background-color: $default-background;\n\n &:hover {\n background-color: colors.$primary-tint;\n }\n &:active {\n color: $default-background;\n background-color: colors.$primary-secondary-text;\n }\n &.is-disabled {\n color: colors.$primary-mid;\n background-color: $default-background;\n &:active {\n color: colors.$primary-mid;\n background-color: $default-background;\n }\n }\n\n &.selectable-button {\n &:active {\n color: colors.$primary-accent-main !important;\n background: colors.$primary-accent-background !important;\n }\n\n &.is-selected {\n color: colors.$primary-accent-main;\n border: 1px solid colors.$primary-accent-main;\n background: colors.$primary-accent-background;\n }\n }\n }\n\n &.sql-button--special {\n color: colors.$primary-accent-main;\n border: 1px solid colors.$primary-accent-mid;\n background-color: $default-background;\n\n &:hover {\n border: 1px solid colors.$primary-accent-main;\n }\n &:active {\n border: 1px solid colors.$primary-accent-main;\n background-color: colors.$primary-accent-background;\n }\n &.is-disabled {\n color: colors.$primary-accent-mid;\n border: 1px solid colors.$primary-accent-tint;\n background-color: $default-background;\n\n &:active {\n border: 1px solid colors.$primary-accent-tint;\n background-color: $default-background;\n }\n }\n }\n\n &.sql-button--special2 {\n color: colors.$primary-accent-main;\n background-color: $default-background;\n\n &:hover {\n background-color: colors.$primary-accent-background;\n }\n &:active {\n color: colors.$primary-accent-main;\n background-color: colors.$primary-accent-tint;\n }\n &.is-disabled {\n color: colors.$primary-accent-mid;\n background-color: colors.$primary-accent-background;\n &:active {\n color: colors.$primary-accent-mid;\n background-color: colors.$primary-accent-background;\n }\n }\n }\n\n &.sql-button--dotted {\n color: colors.$primary-mid;\n font-weight: bold;\n\n border: 1px dashed colors.$primary-mid;\n border-radius: s.spacing(3);\n\n background-color: transparent;\n\n &:hover:not(.is-disabled) {\n color: colors.$primary-accent-main;\n border: 1px dashed colors.$primary-accent-main;\n background-color: colors.$primary-accent-background;\n }\n }\n\n /* Sizes */\n &.sql-button--small {\n height: s.spacing(3);\n font-weight: 400;\n font-size: 12px;\n line-height: 14px;\n\n .slot-container {\n padding: 0 s.spacing(1);\n .icon-left {\n margin-right: 2px;\n }\n .icon-right {\n margin-left: 2px;\n }\n }\n\n .sql-spinner .spinner {\n height: s.spacing(2);\n }\n }\n\n &.sql-button--small-square {\n height: s.spacing(3);\n font-weight: 400;\n font-size: 12px;\n line-height: 15px;\n\n .slot-container {\n padding: 4px;\n }\n }\n\n &.sql-button--small-square-no-padding {\n height: s.spacing(3);\n font-weight: 400;\n font-size: 12px;\n line-height: 15px;\n\n .slot-container {\n padding: 0;\n }\n }\n\n &.sql-button--medium {\n height: s.spacing(4);\n\n .slot-container {\n padding: 0 12px;\n .icon-left {\n margin-right: 2px;\n }\n .icon-right {\n margin-left: 2px;\n }\n }\n }\n\n &.sql-button--medium-square {\n height: s.spacing(4);\n .slot-container {\n padding: 6px;\n }\n }\n\n &.sql-button--large {\n height: 36px;\n\n .slot-container {\n padding: 0 s.spacing(2);\n .icon-left {\n margin-right: 4px;\n }\n .icon-right {\n margin-left: 4px;\n }\n }\n }\n\n &.sql-button--large-square {\n height: 36px;\n .slot-container {\n padding: s.spacing(1);\n }\n }\n\n &.sql-button--xlarge {\n height: s.spacing(6);\n\n .slot-container {\n padding: 0 22px;\n .icon-left {\n margin-right: 4px;\n }\n .icon-right {\n margin-left: 4px;\n }\n }\n }\n\n &.sql-button--xlarge-square {\n height: s.spacing(6);\n .slot-container {\n padding: s.spacing(2);\n }\n }\n }\n</style>\n"],"names":["SQL_BUTTON_TYPES","SQL_BUTTON_SIZES","SQL_BUTTON_NATIVE_TYPES","SQL_SPINNER_THEME_MODES","SQL_SPINNER_SIZES","props","__props","hasLabel","computed","_createElementBlock","_normalizeClass","_createElementVNode","_hoisted_2","_toDisplayString","CLICK","emit","__emit","spinnerType","handleClick","event","_createBlock","SqlSpinner","$slots","_openBlock","_renderSlot","_ctx"],"mappings":";AACO,MAAMA,IAAmB;AAAA,EAC9B,SAAS;AAAA,EACT,SAAS;AAMX,GAIaC,IAAmB;AAAA,EAM9B,OAAO;AAIT,GAIaC,IAA0B;AAAA,EACrC,QAAQ;AAGV,GAIaC,IAA0B;AAAA,EACrC,OAAO;AAAA;AAAA,EACP,MAAM;AAAA;AACR,GAGaC,IAAoB;AAAA,EAE/B,QAAQ;AAEV;;;;;;;;;;;;;;;;;;;;;ACpCE,UAAMC,IAAQC,GAgBRC,IAAWC,EAAS,MAAMH,EAAM,SAASA,EAAM,MAAM,SAAS,CAAC;2BAIrEI,EAUO,QAAA;AAAA,MATL,OAAKC,EAAA,CAAC,eAAa,CAAA,SACDJ,EAAA,IAAI,oBAAoBA,EAAA,IAAI,EAAA,CAAA,CAAA;AAAA,MAC9C,MAAK;AAAA,MACJ,cAAYC,EAAA,QAAWD,EAAA,QAAQ;AAAA,MAC/B,aAAWC,EAAA,QAAQ,WAAc;AAAA,MACjC,eAAaA,EAAA,QAAW,SAAS;AAAA,IAAA;sBAElCI,EAAqB,QAAA,EAAf,OAAM,OAAA,GAAM,MAAA,EAAA;AAAA,MACNJ,EAAA,cAAZE,EAAwD,QAAxDG,GAAwDC,EAAfP,EAAA,KAAK,GAAA,CAAA;;;;;;;;iECrCrCQ,IAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACiDnB,UAAMT,IAAQC,GAyBRS,IAAOC,GAIPC,IAAcT;AAAA,MAAS,MAC3BH,EAAM,SAASL,EAAiB,UAC5BG,EAAwB,QACxBA,EAAwB;AAAA,IAAA;AAG9B,aAASe,EAAYC,GAAmB;AACtC,MAAId,EAAM,YAAYA,EAAM,WAC5BU,EAAKD,GAAOK,CAAK;AAAA,IACnB;2BAvFAV,EAiCS,UAAA;AAAA,MAhCP,UAAM,cAAY;AAAA,QAOFH,EAAA,sBAAsBA,EAAA,IAAI,KAAA;AAAA,QAAeA,EAAA,sBAAsBA,EAAA,IAAI,KAAA;AAAA;yBAAwCA,EAAA;AAAA,wBAAgCA,EAAA;AAAA,uBAA8BA,EAAA;AAAA,sBAA4BA,EAAA;AAAA,sBAA2BA,EAAA;AAAA,+BAAoCA,EAAA,aAAQ;AAAA,yBAAkCA,EAAA;AAAA,QAAA;AAAA;MAN7T,MAAMA,EAAA;AAAA,MACN,UAAUA,EAAA,YAAYA,EAAA;AAAA,MACtB,WAAWA,EAAA;AAAA,MACX,aAAWA,EAAA,WAAW;AAAA,MACtB,iBAAeA,EAAA,YAAYA,EAAA,WAAW;AAAA,MACtC,gBAAcA,EAAA,aAAQ,OAAA,CAAA,CAAcA,EAAA,WAAW;AAAA,MAc/C,SAAOY;AAAA,IAAA;MAGRP,EAQO,QAAA;AAAA,QARD,OAAKD,EAAA,CAAC,kBAAgB,EAAA,cAAyBJ,EAAA,SAAO,CAAA;AAAA,MAAA;QAExCA,EAAA,gBAAlBc,EAAqEC,GAAA;AAAA;UAA1C,OAAM;AAAA,UAAe,MAAMJ,EAAA;AAAA,QAAA;QAG3CK,EAAAA,OAAO,WAAlBC,KAAAd,EAEM,OAFNG,GAEM;AAAA,UADJY,EAAQC,EAAA,QAAA,WAAA,CAAA,GAAA,QAAA,EAAA;AAAA,QAAA;;;;;"}
|
|
1
|
+
{"version":3,"file":"index.es.js","sources":["../src/ui/SqlSpinner/SqlSpinner.types.ts","../src/ui/SqlSpinner/SqlSpinner.vue","../src/ui/SqlButton/SqlButton.types.ts","../src/constants/events.ts","../src/ui/SqlButton/SqlButton.vue","../src/ui/BasicTable/BasicTable.types.ts","../src/ui/BasicTable/BasicTable.vue"],"sourcesContent":["// Tema del spinner (clases: theme-<mode>)\nexport const SQL_SPINNER_THEME_MODES = {\n LIGHT: 'light', // para fondos oscuros: spinner claro\n DARK: 'dark', // para fondos claros: spinner oscuro\n} as const;\nexport type SqlSpinnerThemeMode =\n (typeof SQL_SPINNER_THEME_MODES)[keyof typeof SQL_SPINNER_THEME_MODES];\n\n// Tamaños (clases: sql-spinner--<size>)\nexport const SQL_SPINNER_SIZES = {\n SMALL: 'small',\n MEDIUM: 'medium',\n LARGE: 'large',\n} as const;\nexport type SqlSpinnerSize = (typeof SQL_SPINNER_SIZES)[keyof typeof SQL_SPINNER_SIZES];\n","<script setup lang=\"ts\">\nimport { type PropType, computed } from 'vue';\nimport {\n SQL_SPINNER_SIZES,\n SQL_SPINNER_THEME_MODES,\n type SqlSpinnerSize,\n type SqlSpinnerThemeMode,\n} from './SqlSpinner.types';\n\nconst props = defineProps({\n type: {\n type: String as PropType<SqlSpinnerThemeMode>,\n default: SQL_SPINNER_THEME_MODES.DARK,\n },\n size: {\n type: String as PropType<SqlSpinnerSize>,\n default: SQL_SPINNER_SIZES.SMALL,\n },\n // Opcional: texto accesible (si no hay, marcamos aria-hidden)\n label: {\n type: String,\n default: '',\n },\n});\n\nconst hasLabel = computed(() => props.label && props.label.length > 0);\n</script>\n\n<template>\n <span\n class=\"sql-spinner\"\n :class=\"[`theme-${type}`, `sql-spinner--${size}`]\"\n role=\"status\"\n :aria-label=\"hasLabel ? label : undefined\"\n :aria-live=\"hasLabel ? 'polite' : undefined\"\n :aria-hidden=\"hasLabel ? undefined : 'true'\"\n >\n <span class=\"ring\" />\n <span v-if=\"hasLabel\" class=\"sr-only\">{{ label }}</span>\n </span>\n</template>\n\n<style lang=\"scss\" scoped>\n@use '../../assets/css/colors.scss' as colors;\n\n/* Accesibilidad (solo-lectura visual) */\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n\n@keyframes sql-spin {\n to {\n transform: rotate(1turn);\n }\n}\n\n.sql-spinner {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n\n /* color del anillo por tema (paridad con los PNG de frontend-app) */\n --sql-spinner-color: #{colors.$primary-accent-main};\n\n /* Tamaños (paridad con frontend-app: small=20, medium=36, large=64) */\n &.sql-spinner--small {\n width: 20px;\n height: 20px;\n }\n &.sql-spinner--medium {\n width: 36px;\n height: 36px;\n }\n &.sql-spinner--large {\n width: 64px;\n height: 64px;\n }\n\n .ring {\n box-sizing: border-box;\n width: 100%;\n height: 100%;\n border-radius: 50%;\n\n /* Anillo con gradiente cónico transparente → color (arco que se desvanece) */\n background: conic-gradient(from 90deg, transparent 8%, var(--sql-spinner-color) 100%);\n\n /* Recorta el centro para dejar solo el anillo (grosor ~16% del radio ≈ 8% del diámetro,\n medido sobre los PNG de frontend-app) */\n mask: radial-gradient(farthest-side, transparent calc(100% - 16%), #000 calc(100% - 16%));\n /* stylelint-disable-next-line property-no-vendor-prefix */\n -webkit-mask: radial-gradient(\n farthest-side,\n transparent calc(100% - 16%),\n #000 calc(100% - 16%)\n );\n\n animation: sql-spin 1s linear infinite;\n }\n\n /* Temas */\n &.theme-dark {\n --sql-spinner-color: #{colors.$primary-accent-main};\n }\n &.theme-light {\n --sql-spinner-color: #{colors.$white};\n }\n}\n</style>\n","// Tipos de botón (clases: sql-button--<type>)\nexport const SQL_BUTTON_TYPES = {\n DEFAULT: 'default',\n PRIMARY: 'primary',\n SECONDARY: 'secondary',\n TERTIARY: 'tertiary',\n SPECIAL: 'special',\n SPECIAL2: 'special2',\n SPECIAL3: 'special3',\n DOTTED: 'dotted',\n DANGER: 'danger',\n GRADIENT: 'gradient',\n} as const;\nexport type SqlButtonType = (typeof SQL_BUTTON_TYPES)[keyof typeof SQL_BUTTON_TYPES];\n\n// Tamaños de botón (clases: sql-button--<size>)\nexport const SQL_BUTTON_SIZES = {\n SMALL: 'small',\n SMALL_SQUARE: 'small-square',\n SMALL_SQUARE_NO_PADDING: 'small-square-no-padding',\n MEDIUM: 'medium',\n MEDIUM_SQUARE: 'medium-square',\n LARGE: 'large',\n LARGE_SQUARE: 'large-square',\n XLARGE: 'xlarge',\n XLARGE_SQUARE: 'xlarge-square',\n} as const;\nexport type SqlButtonSize = (typeof SQL_BUTTON_SIZES)[keyof typeof SQL_BUTTON_SIZES];\n\n// type nativo del <button>\nexport const SQL_BUTTON_NATIVE_TYPES = {\n BUTTON: 'button',\n SUBMIT: 'submit',\n RESET: 'reset',\n} as const;\nexport type SqlButtonNativeType =\n (typeof SQL_BUTTON_NATIVE_TYPES)[keyof typeof SQL_BUTTON_NATIVE_TYPES];\n","// Evento genérico de click para props/emit\nexport const CLICK = 'click' as const;\nexport type ClickEventName = typeof CLICK;\n","<template>\n <button\n class=\"sql-button\"\n :type=\"nativeType\"\n :disabled=\"disabled || loading\"\n :autofocus=\"autofocus\"\n :aria-busy=\"loading || undefined\"\n :aria-disabled=\"disabled || loading || undefined\"\n :aria-pressed=\"selected !== null ? !!selected : undefined\"\n :class=\"[\n type ? `sql-button--${type}` : '',\n size ? `sql-button--${size}` : '',\n {\n 'is-disabled': disabled,\n 'is-loading': loading,\n 'is-circle': circle,\n 'is-plain': plain,\n 'is-round': round,\n 'selectable-button': selected !== null,\n 'is-selected': selected,\n },\n ]\"\n @click=\"handleClick\"\n >\n <!-- Siempre renderizamos el contenedor para que el spinner funcione con o sin texto -->\n <span class=\"slot-container\" :class=\"{ 'is-loading': loading }\">\n <!-- Spinner superpuesto cuando loading -->\n <SqlSpinner v-if=\"loading\" class=\"sql-spinner\" :type=\"spinnerType\" />\n\n <!-- Texto/slot (se oculta visualmente cuando loading) -->\n <div v-if=\"$slots.default\" class=\"slotted-content\">\n <slot />\n </div>\n </span>\n </button>\n</template>\n<script setup lang=\"ts\">\nimport { computed, type PropType } from 'vue';\nimport { SqlSpinner, SQL_SPINNER_THEME_MODES } from '@shared/ui/SqlSpinner';\nimport {\n SQL_BUTTON_NATIVE_TYPES,\n SQL_BUTTON_SIZES,\n SQL_BUTTON_TYPES,\n type SqlButtonNativeType,\n type SqlButtonSize,\n type SqlButtonType,\n} from './SqlButton.types';\nimport { CLICK } from '@shared/constants/events';\n\nconst props = defineProps({\n type: {\n type: String as PropType<SqlButtonType>,\n default: SQL_BUTTON_TYPES.DEFAULT,\n },\n size: {\n type: String as PropType<SqlButtonSize>,\n default: SQL_BUTTON_SIZES.LARGE,\n },\n nativeType: {\n type: String as PropType<SqlButtonNativeType>,\n default: SQL_BUTTON_NATIVE_TYPES.BUTTON,\n },\n selected: {\n type: Boolean as PropType<boolean | null>,\n default: null,\n },\n loading: Boolean,\n disabled: Boolean,\n plain: Boolean,\n autofocus: Boolean,\n round: Boolean,\n circle: Boolean,\n});\n\nconst emit = defineEmits<{\n (e: typeof CLICK, event: MouseEvent): void;\n}>();\n\nconst spinnerType = computed(() =>\n props.type === SQL_BUTTON_TYPES.PRIMARY || props.type === SQL_BUTTON_TYPES.DANGER\n ? SQL_SPINNER_THEME_MODES.LIGHT\n : SQL_SPINNER_THEME_MODES.DARK\n);\n\nfunction handleClick(event: MouseEvent) {\n if (props.disabled || props.loading) return; // guard\n emit(CLICK, event);\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@use '../../assets/css/colors.scss' as colors;\n@use '../../assets/css/spacing.scss' as s;\n\n/* keyframes a nivel raíz */\n@keyframes rotating {\n 0% {\n transform: rotateZ(360deg);\n }\n 100% {\n transform: rotateZ(0deg);\n }\n}\n\n$default-background: colors.$white;\n\n.sql-button {\n padding: 0;\n\n color: colors.$primary-main;\n font-weight: 500;\n font-size: 14px;\n line-height: 20px;\n\n border-width: 0;\n border-radius: 4px;\n outline: none;\n\n cursor: pointer;\n transition:\n background 0.2s,\n color 0.2s,\n border-color 0.2s;\n\n &:active,\n &:hover {\n outline: none;\n }\n\n &[disabled] {\n cursor: not-allowed;\n }\n\n &.is-circle {\n padding: s.spacing(1);\n border-radius: 50%;\n }\n\n .slot-container {\n position: relative;\n\n display: inline-flex;\n justify-content: center;\n align-items: center;\n\n .slotted-content {\n display: inline-flex;\n align-items: center;\n\n white-space: nowrap;\n }\n\n &.is-loading {\n .slotted-content {\n visibility: hidden;\n } /* el contenido sigue en el flujo para no cambiar ancho/alto */\n }\n\n .sql-spinner {\n position: absolute;\n inset: 0;\n\n display: flex;\n justify-content: center;\n align-items: center;\n\n width: 1em;\n height: 1em;\n margin: auto;\n\n pointer-events: none;\n }\n }\n\n /* Types */\n &.sql-button--default {\n color: colors.$primary-main;\n background-color: $default-background;\n\n &:hover {\n background-color: colors.$primary-tint;\n }\n\n &.is-disabled {\n color: colors.$primary-mid;\n background-color: $default-background;\n }\n }\n\n &.sql-button--primary {\n color: colors.$white;\n background-color: colors.$primary-accent-main;\n\n &:hover {\n background-color: colors.$primary-accent-shadow;\n }\n &.is-disabled {\n background-color: colors.$primary-accent-mid;\n }\n }\n\n &.sql-button--secondary {\n color: colors.$primary-main;\n background-color: colors.$secondary-background;\n\n &:hover {\n background-color: colors.$primary-tint;\n }\n &.is-disabled {\n color: colors.$primary-secondary-text;\n background-color: colors.$primary-tint;\n }\n }\n\n &.sql-button--tertiary {\n color: colors.$primary-main;\n background-color: $default-background;\n\n &:hover {\n background-color: colors.$primary-tint;\n }\n &:active {\n color: $default-background;\n background-color: colors.$primary-secondary-text;\n }\n &.is-disabled {\n color: colors.$primary-mid;\n background-color: $default-background;\n &:active {\n color: colors.$primary-mid;\n background-color: $default-background;\n }\n }\n\n &.selectable-button {\n &:active {\n color: colors.$primary-accent-main !important;\n background: colors.$primary-accent-background !important;\n }\n\n &.is-selected {\n color: colors.$primary-accent-main;\n border: 1px solid colors.$primary-accent-main;\n background: colors.$primary-accent-background;\n }\n }\n }\n\n &.sql-button--special {\n color: colors.$primary-accent-main;\n border: 1px solid colors.$primary-accent-mid;\n background-color: $default-background;\n\n &:hover {\n border: 1px solid colors.$primary-accent-main;\n }\n &:active {\n border: 1px solid colors.$primary-accent-main;\n background-color: colors.$primary-accent-background;\n }\n &.is-disabled {\n color: colors.$primary-accent-mid;\n border: 1px solid colors.$primary-accent-tint;\n background-color: $default-background;\n\n &:active {\n border: 1px solid colors.$primary-accent-tint;\n background-color: $default-background;\n }\n }\n }\n\n &.sql-button--special2 {\n color: colors.$primary-accent-main;\n background-color: $default-background;\n\n &:hover {\n background-color: colors.$primary-accent-background;\n }\n &:active {\n color: colors.$primary-accent-main;\n background-color: colors.$primary-accent-tint;\n }\n &.is-disabled {\n color: colors.$primary-accent-mid;\n background-color: colors.$primary-accent-background;\n &:active {\n color: colors.$primary-accent-mid;\n background-color: colors.$primary-accent-background;\n }\n }\n }\n\n &.sql-button--special3 {\n color: colors.$primary-accent-main;\n font-weight: 400;\n\n background-color: colors.$primary-accent-tint;\n\n &:hover {\n color: colors.$white;\n background-color: colors.$primary-accent-main;\n }\n &:active {\n color: colors.$primary-accent-main;\n background-color: colors.$primary-accent-tint;\n }\n &.is-disabled {\n color: colors.$primary-accent-mid;\n background-color: colors.$primary-accent-background;\n &:active {\n color: colors.$primary-accent-mid;\n background-color: colors.$primary-accent-background;\n }\n }\n }\n\n &.sql-button--dotted {\n color: colors.$primary-mid;\n font-weight: bold;\n\n border: 1px dashed colors.$primary-mid;\n border-radius: s.spacing(3);\n\n background-color: transparent;\n\n &:hover:not(.is-disabled) {\n color: colors.$primary-accent-main;\n border: 1px dashed colors.$primary-accent-main;\n background-color: colors.$primary-accent-background;\n }\n }\n\n &.sql-button--danger {\n color: colors.$tertiary-accent-main !important;\n\n background-color: colors.$tertiary-accent-tint;\n\n &:hover {\n background-color: colors.$tertiary-accent-mid;\n }\n &.is-disabled {\n color: colors.$tertiary-accent-mid;\n background-color: colors.$tertiary-accent-tint;\n }\n }\n\n &.sql-button--gradient {\n color: colors.$white !important;\n\n background: linear-gradient(\n 106.21deg,\n colors.$ai-gradient-1 22.52%,\n colors.$ai-gradient-2 100%\n );\n\n &:hover {\n background: linear-gradient(\n 106deg,\n colors.$ai-gradient-hover 22.52%,\n colors.$ai-gradient-2 100%\n ) !important;\n }\n &.is-disabled {\n background: linear-gradient(\n 106deg,\n colors.$ai-gradient-disabled 22.52%,\n colors.$ai-gradient-2 100%\n );\n }\n }\n\n /* Sizes */\n &.sql-button--small {\n height: s.spacing(3);\n font-weight: 400;\n font-size: 12px;\n line-height: 14px;\n\n .slot-container {\n padding: 0 s.spacing(1);\n .icon-left {\n margin-right: 2px;\n }\n .icon-right {\n margin-left: 2px;\n }\n }\n\n .sql-spinner .spinner {\n height: s.spacing(2);\n }\n }\n\n &.sql-button--small-square {\n height: s.spacing(3);\n font-weight: 400;\n font-size: 12px;\n line-height: 15px;\n\n .slot-container {\n padding: 4px;\n }\n }\n\n &.sql-button--small-square-no-padding {\n width: s.spacing(3);\n height: s.spacing(3);\n font-weight: 400;\n font-size: 12px;\n line-height: 15px;\n\n .slot-container {\n padding: 0;\n }\n }\n\n &.sql-button--medium {\n height: s.spacing(4);\n\n .slot-container {\n padding: 0 12px;\n .icon-left {\n margin-right: 2px;\n }\n .icon-right {\n margin-left: 2px;\n }\n }\n }\n\n &.sql-button--medium-square {\n height: s.spacing(4);\n .slot-container {\n padding: 6px;\n }\n }\n\n &.sql-button--large {\n height: 36px;\n\n .slot-container {\n padding: 0 s.spacing(2);\n .icon-left {\n margin-right: 4px;\n }\n .icon-right {\n margin-left: 4px;\n }\n }\n }\n\n &.sql-button--large-square {\n height: 36px;\n .slot-container {\n padding: s.spacing(1);\n }\n }\n\n &.sql-button--xlarge {\n height: s.spacing(6);\n\n .slot-container {\n padding: 0 22px;\n .icon-left {\n margin-right: 4px;\n }\n .icon-right {\n margin-left: 4px;\n }\n }\n }\n\n &.sql-button--xlarge-square {\n height: s.spacing(6);\n .slot-container {\n padding: s.spacing(2);\n }\n }\n}\n</style>\n","// Alineación de una columna (clases: basic-table__th--<align> / __td--<align>)\nexport const BASIC_TABLE_ALIGN = {\n LEFT: 'left',\n CENTER: 'center',\n RIGHT: 'right',\n} as const;\nexport type BasicTableAlign = (typeof BASIC_TABLE_ALIGN)[keyof typeof BASIC_TABLE_ALIGN];\n\n// Definición de una columna. `key` mapea a la propiedad de la row para el\n// contenido por defecto y da nombre al slot scoped `cell-<key>`.\nexport interface BasicTableColumn {\n key: string;\n label: string;\n align?: BasicTableAlign;\n width?: string;\n}\n\n// Row genérica: sólo se exige un `id` estable para el :key; el resto de las\n// propiedades las consume cada columna vía su `key`.\nexport interface BasicTableRow {\n id: string | number;\n [key: string]: unknown;\n}\n","<script setup lang=\"ts\">\nimport { type PropType } from 'vue';\nimport { BASIC_TABLE_ALIGN, type BasicTableColumn, type BasicTableRow } from './BasicTable.types';\n\ndefineProps({\n columns: {\n type: Array as PropType<BasicTableColumn[]>,\n required: true,\n },\n rows: {\n type: Array as PropType<BasicTableRow[]>,\n required: true,\n },\n emptyMessage: {\n type: String,\n default: '',\n },\n});\n</script>\n\n<template>\n <div class=\"basic-table\">\n <div class=\"basic-table__wrapper\">\n <table class=\"basic-table__table\">\n <thead>\n <tr>\n <th\n v-for=\"column in columns\"\n :key=\"column.key\"\n :class=\"`basic-table__th--${column.align ?? BASIC_TABLE_ALIGN.LEFT}`\"\n :style=\"column.width ? { width: column.width } : undefined\"\n >\n {{ column.label }}\n </th>\n </tr>\n </thead>\n <tbody>\n <tr v-if=\"rows.length === 0\">\n <td\n class=\"basic-table__empty\"\n :colspan=\"columns.length\"\n data-testid=\"basic-table-empty\"\n >\n <slot name=\"empty\">{{ emptyMessage }}</slot>\n </td>\n </tr>\n <tr v-for=\"row in rows\" :key=\"row.id\" data-testid=\"basic-table-row\">\n <td\n v-for=\"column in columns\"\n :key=\"column.key\"\n :class=\"`basic-table__td--${column.align ?? BASIC_TABLE_ALIGN.LEFT}`\"\n >\n <slot :name=\"`cell-${column.key}`\" :row=\"row\">{{ row[column.key] }}</slot>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use '../../assets/css/colors.scss' as colors;\n@use '../../assets/css/spacing.scss' as s;\n@use '../../assets/css/font-size.scss' as f;\n\n.basic-table {\n &__wrapper {\n border: 1px solid colors.$primary-tint;\n border-radius: 8px;\n\n overflow-x: auto;\n }\n\n &__table {\n width: 100%;\n\n border-collapse: collapse;\n\n // Own every border/height explicitly so the table stays consistent even\n // when embedded in a host app whose global `table td/th` rules would\n // otherwise leak in. The scoped specificity (block + [data-v]) beats them.\n th {\n padding: s.spacing(1) s.spacing(2);\n\n color: colors.$primary-main;\n font-weight: 700;\n font-size: f.font-size('text');\n\n border: 0;\n border-bottom: 1px solid colors.$primary-tint;\n\n background-color: colors.$primary-background;\n }\n\n td {\n height: auto;\n padding: s.spacing(2);\n\n color: colors.$primary-main;\n font-size: f.font-size('text');\n\n border: 0;\n }\n\n tr {\n border: 0;\n }\n\n // Row separator only BETWEEN adjacent body rows: empty/single → none.\n tbody tr + tr {\n border-top: 1px solid colors.$primary-tint;\n }\n }\n\n // Alignment modifiers are always emitted, so each owns its text-align and\n // no base `th` text-align competes on specificity.\n &__th--left,\n &__td--left {\n text-align: left;\n }\n\n &__th--center,\n &__td--center {\n text-align: center;\n }\n\n &__th--right,\n &__td--right {\n text-align: right;\n }\n\n &__empty {\n padding: s.spacing(5) s.spacing(3);\n\n color: colors.$primary-secondary-text;\n text-align: center;\n }\n}\n</style>\n"],"names":["SQL_SPINNER_THEME_MODES","SQL_SPINNER_SIZES","props","__props","hasLabel","computed","_createElementBlock","_normalizeClass","_createElementVNode","_hoisted_2","_toDisplayString","SQL_BUTTON_TYPES","SQL_BUTTON_SIZES","SQL_BUTTON_NATIVE_TYPES","CLICK","emit","__emit","spinnerType","handleClick","event","_createBlock","_unref","SqlSpinner","$slots","_openBlock","_renderSlot","_ctx","BASIC_TABLE_ALIGN","_hoisted_1","_hoisted_3","_Fragment","_renderList","column","_a","_normalizeStyle","_hoisted_4","row"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
@charset "UTF-8";*,*:before,*:after{box-sizing:border-box;-webkit-tap-highlight-color:transparent}html,body{height:100%}body{margin:0;color:#414c58;font-size:14px;font-family:Mulish,system-ui,-apple-system,Segoe UI,Roboto,sans-serif;background:#fff}a{text-decoration:none;color:inherit}article,aside,blockquote,body,button,dd,details,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,hr,input,legend,li,menu,nav,ol,p,section,td,textarea,th,ul{margin:0;padding:0}button,input,select,textarea{font:inherit;line-height:inherit}img,svg{max-width:100%;height:auto;display:block}ul,ol{list-style:none}table{border-collapse:collapse;border-spacing:0}caption,th{text-align:left;font-weight:400;vertical-align:middle}q{quotes:none}q:before,q:after{content:"";content:none}input[type=search]{-webkit-appearance:textfield;outline-offset:-2px}input[type=search]::-webkit-search-decoration{-webkit-appearance:none}textarea{overflow:auto;vertical-align:top;resize:vertical}[hidden]{display:none!important}.sr-only[data-v-bdd073d8]{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@keyframes sql-spin-bdd073d8{to{transform:rotate(360deg)}}.sql-spinner[data-v-bdd073d8]{display:inline-flex;align-items:center;justify-content:center}.sql-spinner.sql-spinner--small[data-v-bdd073d8]{width:12px;height:12px}.sql-spinner.sql-spinner--medium[data-v-bdd073d8]{width:16px;height:16px}.sql-spinner.sql-spinner--large[data-v-bdd073d8]{width:24px;height:24px}.sql-spinner .ring[data-v-bdd073d8]{box-sizing:border-box;width:100%;height:100%;border-radius:50%;border-style:solid;border-width:2px;animation:sql-spin-bdd073d8 .8s linear infinite}.sql-spinner.theme-light .ring[data-v-bdd073d8]{border-color:#fff #fff #fff transparent}.sql-spinner.theme-dark .ring[data-v-bdd073d8]{border-color:#414c58 #414c58 #414c58 transparent}@keyframes rotating-bd5f8a62{0%{transform:rotate(360deg)}to{transform:rotate(0)}}.sql-button[data-v-bd5f8a62]{padding:0;color:#414c58;font-weight:500;font-size:14px;line-height:20px;border-width:0;border-radius:4px;outline:none;cursor:pointer;transition:background .2s,color .2s,border-color .2s}.sql-button[data-v-bd5f8a62]:active,.sql-button[data-v-bd5f8a62]:hover{outline:none}.sql-button[disabled][data-v-bd5f8a62]{cursor:not-allowed}.sql-button.is-circle[data-v-bd5f8a62]{padding:4px;border-radius:50%}.sql-button .slot-container[data-v-bd5f8a62]{position:relative;display:inline-flex;justify-content:center;align-items:center}.sql-button .slot-container .slotted-content[data-v-bd5f8a62]{display:inline-flex;align-items:center}.sql-button .slot-container.is-loading .slotted-content[data-v-bd5f8a62]{visibility:hidden}.sql-button .slot-container .sql-spinner[data-v-bd5f8a62]{position:absolute;inset:0;display:flex;justify-content:center;align-items:center;width:1em;height:1em;margin:auto;pointer-events:none}.sql-button.sql-button--default[data-v-bd5f8a62]{color:#414c58;background-color:#fff}.sql-button.sql-button--default[data-v-bd5f8a62]:hover{background-color:#e7e9ea}.sql-button.sql-button--default.is-disabled[data-v-bd5f8a62]{color:#b8bcc0;background-color:#fff}.sql-button.sql-button--primary[data-v-bd5f8a62]{color:#fff;background-color:#6a69ff}.sql-button.sql-button--primary[data-v-bd5f8a62]:hover{background-color:#504fbf}.sql-button.sql-button--primary.is-disabled[data-v-bd5f8a62]{background-color:#c7c7ff}.sql-button.sql-button--secondary[data-v-bd5f8a62]{color:#414c58;background-color:#f6f6f6}.sql-button.sql-button--secondary[data-v-bd5f8a62]:hover{background-color:#e7e9ea}.sql-button.sql-button--secondary.is-disabled[data-v-bd5f8a62]{color:#888f97;background-color:#e7e9ea}.sql-button.sql-button--tertiary[data-v-bd5f8a62]{color:#414c58;background-color:#fff}.sql-button.sql-button--tertiary[data-v-bd5f8a62]:hover{background-color:#e7e9ea}.sql-button.sql-button--tertiary[data-v-bd5f8a62]:active{color:#fff;background-color:#888f97}.sql-button.sql-button--tertiary.is-disabled[data-v-bd5f8a62],.sql-button.sql-button--tertiary.is-disabled[data-v-bd5f8a62]:active{color:#b8bcc0;background-color:#fff}.sql-button.sql-button--tertiary.selectable-button[data-v-bd5f8a62]:active{color:#6a69ff!important;background:#f2f2ff!important}.sql-button.sql-button--tertiary.selectable-button.is-selected[data-v-bd5f8a62]{color:#6a69ff;border:1px solid #6a69ff;background:#f2f2ff}.sql-button.sql-button--special[data-v-bd5f8a62]{color:#6a69ff;border:1px solid #c7c7ff;background-color:#fff}.sql-button.sql-button--special[data-v-bd5f8a62]:hover{border:1px solid #6a69ff}.sql-button.sql-button--special[data-v-bd5f8a62]:active{border:1px solid #6a69ff;background-color:#f2f2ff}.sql-button.sql-button--special.is-disabled[data-v-bd5f8a62]{color:#c7c7ff;border:1px solid #ececff;background-color:#fff}.sql-button.sql-button--special.is-disabled[data-v-bd5f8a62]:active{border:1px solid #ececff;background-color:#fff}.sql-button.sql-button--special2[data-v-bd5f8a62]{color:#6a69ff;background-color:#fff}.sql-button.sql-button--special2[data-v-bd5f8a62]:hover{background-color:#f2f2ff}.sql-button.sql-button--special2[data-v-bd5f8a62]:active{color:#6a69ff;background-color:#ececff}.sql-button.sql-button--special2.is-disabled[data-v-bd5f8a62],.sql-button.sql-button--special2.is-disabled[data-v-bd5f8a62]:active{color:#c7c7ff;background-color:#f2f2ff}.sql-button.sql-button--dotted[data-v-bd5f8a62]{color:#b8bcc0;font-weight:700;border:1px dashed #b8bcc0;border-radius:12px;background-color:transparent}.sql-button.sql-button--dotted[data-v-bd5f8a62]:hover:not(.is-disabled){color:#6a69ff;border:1px dashed #6a69ff;background-color:#f2f2ff}.sql-button.sql-button--small[data-v-bd5f8a62]{height:12px;font-weight:400;font-size:12px;line-height:14px}.sql-button.sql-button--small .slot-container[data-v-bd5f8a62]{padding:0 4px}.sql-button.sql-button--small .slot-container .icon-left[data-v-bd5f8a62]{margin-right:2px}.sql-button.sql-button--small .slot-container .icon-right[data-v-bd5f8a62]{margin-left:2px}.sql-button.sql-button--small .sql-spinner .spinner[data-v-bd5f8a62]{height:8px}.sql-button.sql-button--small-square[data-v-bd5f8a62]{height:12px;font-weight:400;font-size:12px;line-height:15px}.sql-button.sql-button--small-square .slot-container[data-v-bd5f8a62]{padding:4px}.sql-button.sql-button--small-square-no-padding[data-v-bd5f8a62]{height:12px;font-weight:400;font-size:12px;line-height:15px}.sql-button.sql-button--small-square-no-padding .slot-container[data-v-bd5f8a62]{padding:0}.sql-button.sql-button--medium[data-v-bd5f8a62]{height:16px}.sql-button.sql-button--medium .slot-container[data-v-bd5f8a62]{padding:0 12px}.sql-button.sql-button--medium .slot-container .icon-left[data-v-bd5f8a62]{margin-right:2px}.sql-button.sql-button--medium .slot-container .icon-right[data-v-bd5f8a62]{margin-left:2px}.sql-button.sql-button--medium-square[data-v-bd5f8a62]{height:16px}.sql-button.sql-button--medium-square .slot-container[data-v-bd5f8a62]{padding:6px}.sql-button.sql-button--large[data-v-bd5f8a62]{height:36px}.sql-button.sql-button--large .slot-container[data-v-bd5f8a62]{padding:0 8px}.sql-button.sql-button--large .slot-container .icon-left[data-v-bd5f8a62]{margin-right:4px}.sql-button.sql-button--large .slot-container .icon-right[data-v-bd5f8a62]{margin-left:4px}.sql-button.sql-button--large-square[data-v-bd5f8a62]{height:36px}.sql-button.sql-button--large-square .slot-container[data-v-bd5f8a62]{padding:4px}.sql-button.sql-button--xlarge[data-v-bd5f8a62]{height:24px}.sql-button.sql-button--xlarge .slot-container[data-v-bd5f8a62]{padding:0 22px}.sql-button.sql-button--xlarge .slot-container .icon-left[data-v-bd5f8a62]{margin-right:4px}.sql-button.sql-button--xlarge .slot-container .icon-right[data-v-bd5f8a62]{margin-left:4px}.sql-button.sql-button--xlarge-square[data-v-bd5f8a62]{height:24px}.sql-button.sql-button--xlarge-square .slot-container[data-v-bd5f8a62]{padding:8px}
|
|
1
|
+
@charset "UTF-8";*,*:before,*:after{box-sizing:border-box;-webkit-tap-highlight-color:transparent}html,body{height:100%}body{margin:0;color:#414c58;font-size:14px;font-family:Mulish,system-ui,-apple-system,Segoe UI,Roboto,sans-serif;background:#fff}a{text-decoration:none;color:inherit}article,aside,blockquote,body,button,dd,details,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,hr,input,legend,li,menu,nav,ol,p,section,td,textarea,th,ul{margin:0;padding:0}button,input,select,textarea{font:inherit;line-height:inherit}img,svg{max-width:100%;height:auto;display:block}ul,ol{list-style:none}table{border-collapse:collapse;border-spacing:0}caption,th{text-align:left;font-weight:400;vertical-align:middle}q{quotes:none}q:before,q:after{content:"";content:none}input[type=search]{-webkit-appearance:textfield;outline-offset:-2px}input[type=search]::-webkit-search-decoration{-webkit-appearance:none}textarea{overflow:auto;vertical-align:top;resize:vertical}[hidden]{display:none!important}.sr-only[data-v-9694500e]{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@keyframes sql-spin-9694500e{to{transform:rotate(1turn)}}.sql-spinner[data-v-9694500e]{display:inline-flex;align-items:center;justify-content:center;--sql-spinner-color: #6a69ff}.sql-spinner.sql-spinner--small[data-v-9694500e]{width:20px;height:20px}.sql-spinner.sql-spinner--medium[data-v-9694500e]{width:36px;height:36px}.sql-spinner.sql-spinner--large[data-v-9694500e]{width:64px;height:64px}.sql-spinner .ring[data-v-9694500e]{box-sizing:border-box;width:100%;height:100%;border-radius:50%;background:conic-gradient(from 90deg,transparent 8%,var(--sql-spinner-color) 100%);mask:radial-gradient(farthest-side,transparent 84%,#000 84%);-webkit-mask:radial-gradient(farthest-side,transparent 84%,#000 84%);animation:sql-spin-9694500e 1s linear infinite}.sql-spinner.theme-dark[data-v-9694500e]{--sql-spinner-color: #6a69ff}.sql-spinner.theme-light[data-v-9694500e]{--sql-spinner-color: #fff}@keyframes rotating-9eeb1a72{0%{transform:rotate(360deg)}to{transform:rotate(0)}}.sql-button[data-v-9eeb1a72]{padding:0;color:#414c58;font-weight:500;font-size:14px;line-height:20px;border-width:0;border-radius:4px;outline:none;cursor:pointer;transition:background .2s,color .2s,border-color .2s}.sql-button[data-v-9eeb1a72]:active,.sql-button[data-v-9eeb1a72]:hover{outline:none}.sql-button[disabled][data-v-9eeb1a72]{cursor:not-allowed}.sql-button.is-circle[data-v-9eeb1a72]{padding:4px;border-radius:50%}.sql-button .slot-container[data-v-9eeb1a72]{position:relative;display:inline-flex;justify-content:center;align-items:center}.sql-button .slot-container .slotted-content[data-v-9eeb1a72]{display:inline-flex;align-items:center;white-space:nowrap}.sql-button .slot-container.is-loading .slotted-content[data-v-9eeb1a72]{visibility:hidden}.sql-button .slot-container .sql-spinner[data-v-9eeb1a72]{position:absolute;inset:0;display:flex;justify-content:center;align-items:center;width:1em;height:1em;margin:auto;pointer-events:none}.sql-button.sql-button--default[data-v-9eeb1a72]{color:#414c58;background-color:#fff}.sql-button.sql-button--default[data-v-9eeb1a72]:hover{background-color:#e7e9ea}.sql-button.sql-button--default.is-disabled[data-v-9eeb1a72]{color:#b8bcc0;background-color:#fff}.sql-button.sql-button--primary[data-v-9eeb1a72]{color:#fff;background-color:#6a69ff}.sql-button.sql-button--primary[data-v-9eeb1a72]:hover{background-color:#504fbf}.sql-button.sql-button--primary.is-disabled[data-v-9eeb1a72]{background-color:#c7c7ff}.sql-button.sql-button--secondary[data-v-9eeb1a72]{color:#414c58;background-color:#f6f6f6}.sql-button.sql-button--secondary[data-v-9eeb1a72]:hover{background-color:#e7e9ea}.sql-button.sql-button--secondary.is-disabled[data-v-9eeb1a72]{color:#888f97;background-color:#e7e9ea}.sql-button.sql-button--tertiary[data-v-9eeb1a72]{color:#414c58;background-color:#fff}.sql-button.sql-button--tertiary[data-v-9eeb1a72]:hover{background-color:#e7e9ea}.sql-button.sql-button--tertiary[data-v-9eeb1a72]:active{color:#fff;background-color:#888f97}.sql-button.sql-button--tertiary.is-disabled[data-v-9eeb1a72],.sql-button.sql-button--tertiary.is-disabled[data-v-9eeb1a72]:active{color:#b8bcc0;background-color:#fff}.sql-button.sql-button--tertiary.selectable-button[data-v-9eeb1a72]:active{color:#6a69ff!important;background:#f2f2ff!important}.sql-button.sql-button--tertiary.selectable-button.is-selected[data-v-9eeb1a72]{color:#6a69ff;border:1px solid #6a69ff;background:#f2f2ff}.sql-button.sql-button--special[data-v-9eeb1a72]{color:#6a69ff;border:1px solid #c7c7ff;background-color:#fff}.sql-button.sql-button--special[data-v-9eeb1a72]:hover{border:1px solid #6a69ff}.sql-button.sql-button--special[data-v-9eeb1a72]:active{border:1px solid #6a69ff;background-color:#f2f2ff}.sql-button.sql-button--special.is-disabled[data-v-9eeb1a72]{color:#c7c7ff;border:1px solid #ececff;background-color:#fff}.sql-button.sql-button--special.is-disabled[data-v-9eeb1a72]:active{border:1px solid #ececff;background-color:#fff}.sql-button.sql-button--special2[data-v-9eeb1a72]{color:#6a69ff;background-color:#fff}.sql-button.sql-button--special2[data-v-9eeb1a72]:hover{background-color:#f2f2ff}.sql-button.sql-button--special2[data-v-9eeb1a72]:active{color:#6a69ff;background-color:#ececff}.sql-button.sql-button--special2.is-disabled[data-v-9eeb1a72],.sql-button.sql-button--special2.is-disabled[data-v-9eeb1a72]:active{color:#c7c7ff;background-color:#f2f2ff}.sql-button.sql-button--special3[data-v-9eeb1a72]{color:#6a69ff;font-weight:400;background-color:#ececff}.sql-button.sql-button--special3[data-v-9eeb1a72]:hover{color:#fff;background-color:#6a69ff}.sql-button.sql-button--special3[data-v-9eeb1a72]:active{color:#6a69ff;background-color:#ececff}.sql-button.sql-button--special3.is-disabled[data-v-9eeb1a72],.sql-button.sql-button--special3.is-disabled[data-v-9eeb1a72]:active{color:#c7c7ff;background-color:#f2f2ff}.sql-button.sql-button--dotted[data-v-9eeb1a72]{color:#b8bcc0;font-weight:700;border:1px dashed #b8bcc0;border-radius:12px;background-color:transparent}.sql-button.sql-button--dotted[data-v-9eeb1a72]:hover:not(.is-disabled){color:#6a69ff;border:1px dashed #6a69ff;background-color:#f2f2ff}.sql-button.sql-button--danger[data-v-9eeb1a72]{color:#ff6a69!important;background-color:#ffecec}.sql-button.sql-button--danger[data-v-9eeb1a72]:hover{background-color:#ffc7c7}.sql-button.sql-button--danger.is-disabled[data-v-9eeb1a72]{color:#ffc7c7;background-color:#ffecec}.sql-button.sql-button--gradient[data-v-9eeb1a72]{color:#fff!important;background:linear-gradient(106.21deg,#ff699f 22.52%,#ffba69)}.sql-button.sql-button--gradient[data-v-9eeb1a72]:hover{background:linear-gradient(106deg,#cc547f 22.52%,#ffba69)!important}.sql-button.sql-button--gradient.is-disabled[data-v-9eeb1a72]{background:linear-gradient(106deg,#ffa6c6 22.52%,#ffba69)}.sql-button.sql-button--small[data-v-9eeb1a72]{height:12px;font-weight:400;font-size:12px;line-height:14px}.sql-button.sql-button--small .slot-container[data-v-9eeb1a72]{padding:0 4px}.sql-button.sql-button--small .slot-container .icon-left[data-v-9eeb1a72]{margin-right:2px}.sql-button.sql-button--small .slot-container .icon-right[data-v-9eeb1a72]{margin-left:2px}.sql-button.sql-button--small .sql-spinner .spinner[data-v-9eeb1a72]{height:8px}.sql-button.sql-button--small-square[data-v-9eeb1a72]{height:12px;font-weight:400;font-size:12px;line-height:15px}.sql-button.sql-button--small-square .slot-container[data-v-9eeb1a72]{padding:4px}.sql-button.sql-button--small-square-no-padding[data-v-9eeb1a72]{width:12px;height:12px;font-weight:400;font-size:12px;line-height:15px}.sql-button.sql-button--small-square-no-padding .slot-container[data-v-9eeb1a72]{padding:0}.sql-button.sql-button--medium[data-v-9eeb1a72]{height:16px}.sql-button.sql-button--medium .slot-container[data-v-9eeb1a72]{padding:0 12px}.sql-button.sql-button--medium .slot-container .icon-left[data-v-9eeb1a72]{margin-right:2px}.sql-button.sql-button--medium .slot-container .icon-right[data-v-9eeb1a72]{margin-left:2px}.sql-button.sql-button--medium-square[data-v-9eeb1a72]{height:16px}.sql-button.sql-button--medium-square .slot-container[data-v-9eeb1a72]{padding:6px}.sql-button.sql-button--large[data-v-9eeb1a72]{height:36px}.sql-button.sql-button--large .slot-container[data-v-9eeb1a72]{padding:0 8px}.sql-button.sql-button--large .slot-container .icon-left[data-v-9eeb1a72]{margin-right:4px}.sql-button.sql-button--large .slot-container .icon-right[data-v-9eeb1a72]{margin-left:4px}.sql-button.sql-button--large-square[data-v-9eeb1a72]{height:36px}.sql-button.sql-button--large-square .slot-container[data-v-9eeb1a72]{padding:4px}.sql-button.sql-button--xlarge[data-v-9eeb1a72]{height:24px}.sql-button.sql-button--xlarge .slot-container[data-v-9eeb1a72]{padding:0 22px}.sql-button.sql-button--xlarge .slot-container .icon-left[data-v-9eeb1a72]{margin-right:4px}.sql-button.sql-button--xlarge .slot-container .icon-right[data-v-9eeb1a72]{margin-left:4px}.sql-button.sql-button--xlarge-square[data-v-9eeb1a72]{height:24px}.sql-button.sql-button--xlarge-square .slot-container[data-v-9eeb1a72]{padding:8px}.basic-table__wrapper[data-v-8f713759]{border:1px solid #e7e9ea;border-radius:8px;overflow-x:auto}.basic-table__table[data-v-8f713759]{width:100%;border-collapse:collapse}.basic-table__table th[data-v-8f713759]{padding:4px 8px;color:#414c58;font-weight:700;font-size:14px;border:0;border-bottom:1px solid #e7e9ea;background-color:#f6f6f6}.basic-table__table td[data-v-8f713759]{height:auto;padding:8px;color:#414c58;font-size:14px;border:0}.basic-table__table tr[data-v-8f713759]{border:0}.basic-table__table tbody tr+tr[data-v-8f713759]{border-top:1px solid #e7e9ea}.basic-table__th--left[data-v-8f713759],.basic-table__td--left[data-v-8f713759]{text-align:left}.basic-table__th--center[data-v-8f713759],.basic-table__td--center[data-v-8f713759]{text-align:center}.basic-table__th--right[data-v-8f713759],.basic-table__td--right[data-v-8f713759]{text-align:right}.basic-table__empty[data-v-8f713759]{padding:20px 12px;color:#888f97;text-align:center}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export declare const BASIC_TABLE_ALIGN: {
|
|
2
|
+
readonly LEFT: "left";
|
|
3
|
+
readonly CENTER: "center";
|
|
4
|
+
readonly RIGHT: "right";
|
|
5
|
+
};
|
|
6
|
+
export type BasicTableAlign = (typeof BASIC_TABLE_ALIGN)[keyof typeof BASIC_TABLE_ALIGN];
|
|
7
|
+
export interface BasicTableColumn {
|
|
8
|
+
key: string;
|
|
9
|
+
label: string;
|
|
10
|
+
align?: BasicTableAlign;
|
|
11
|
+
width?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface BasicTableRow {
|
|
14
|
+
id: string | number;
|
|
15
|
+
[key: string]: unknown;
|
|
16
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { type PropType } from 'vue';
|
|
2
|
+
import { type BasicTableColumn, type BasicTableRow } from './BasicTable.types';
|
|
3
|
+
declare var __VLS_1: {}, __VLS_4: `cell-${string}`, __VLS_5: {
|
|
4
|
+
row: BasicTableRow;
|
|
5
|
+
};
|
|
6
|
+
type __VLS_Slots = {} & {
|
|
7
|
+
[K in NonNullable<typeof __VLS_4>]?: (props: typeof __VLS_5) => any;
|
|
8
|
+
} & {
|
|
9
|
+
empty?: (props: typeof __VLS_1) => any;
|
|
10
|
+
};
|
|
11
|
+
declare const __VLS_component: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
12
|
+
columns: {
|
|
13
|
+
type: PropType<BasicTableColumn[]>;
|
|
14
|
+
required: true;
|
|
15
|
+
};
|
|
16
|
+
rows: {
|
|
17
|
+
type: PropType<BasicTableRow[]>;
|
|
18
|
+
required: true;
|
|
19
|
+
};
|
|
20
|
+
emptyMessage: {
|
|
21
|
+
type: StringConstructor;
|
|
22
|
+
default: string;
|
|
23
|
+
};
|
|
24
|
+
}>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
25
|
+
columns: {
|
|
26
|
+
type: PropType<BasicTableColumn[]>;
|
|
27
|
+
required: true;
|
|
28
|
+
};
|
|
29
|
+
rows: {
|
|
30
|
+
type: PropType<BasicTableRow[]>;
|
|
31
|
+
required: true;
|
|
32
|
+
};
|
|
33
|
+
emptyMessage: {
|
|
34
|
+
type: StringConstructor;
|
|
35
|
+
default: string;
|
|
36
|
+
};
|
|
37
|
+
}>> & Readonly<{}>, {
|
|
38
|
+
emptyMessage: string;
|
|
39
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
40
|
+
declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
|
|
41
|
+
export default _default;
|
|
42
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
43
|
+
new (): {
|
|
44
|
+
$slots: S;
|
|
45
|
+
};
|
|
46
|
+
};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export declare const SQL_BUTTON_TYPES: {
|
|
2
|
+
readonly DEFAULT: "default";
|
|
3
|
+
readonly PRIMARY: "primary";
|
|
4
|
+
readonly SECONDARY: "secondary";
|
|
5
|
+
readonly TERTIARY: "tertiary";
|
|
6
|
+
readonly SPECIAL: "special";
|
|
7
|
+
readonly SPECIAL2: "special2";
|
|
8
|
+
readonly SPECIAL3: "special3";
|
|
9
|
+
readonly DOTTED: "dotted";
|
|
10
|
+
readonly DANGER: "danger";
|
|
11
|
+
readonly GRADIENT: "gradient";
|
|
12
|
+
};
|
|
13
|
+
export type SqlButtonType = (typeof SQL_BUTTON_TYPES)[keyof typeof SQL_BUTTON_TYPES];
|
|
14
|
+
export declare const SQL_BUTTON_SIZES: {
|
|
15
|
+
readonly SMALL: "small";
|
|
16
|
+
readonly SMALL_SQUARE: "small-square";
|
|
17
|
+
readonly SMALL_SQUARE_NO_PADDING: "small-square-no-padding";
|
|
18
|
+
readonly MEDIUM: "medium";
|
|
19
|
+
readonly MEDIUM_SQUARE: "medium-square";
|
|
20
|
+
readonly LARGE: "large";
|
|
21
|
+
readonly LARGE_SQUARE: "large-square";
|
|
22
|
+
readonly XLARGE: "xlarge";
|
|
23
|
+
readonly XLARGE_SQUARE: "xlarge-square";
|
|
24
|
+
};
|
|
25
|
+
export type SqlButtonSize = (typeof SQL_BUTTON_SIZES)[keyof typeof SQL_BUTTON_SIZES];
|
|
26
|
+
export declare const SQL_BUTTON_NATIVE_TYPES: {
|
|
27
|
+
readonly BUTTON: "button";
|
|
28
|
+
readonly SUBMIT: "submit";
|
|
29
|
+
readonly RESET: "reset";
|
|
30
|
+
};
|
|
31
|
+
export type SqlButtonNativeType = (typeof SQL_BUTTON_NATIVE_TYPES)[keyof typeof SQL_BUTTON_NATIVE_TYPES];
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { type PropType } from 'vue';
|
|
2
|
+
import { type SqlButtonNativeType, type SqlButtonSize, type SqlButtonType } from './SqlButton.types';
|
|
3
|
+
declare var __VLS_5: {};
|
|
4
|
+
type __VLS_Slots = {} & {
|
|
5
|
+
default?: (props: typeof __VLS_5) => any;
|
|
6
|
+
};
|
|
7
|
+
declare const __VLS_component: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
8
|
+
type: {
|
|
9
|
+
type: PropType<SqlButtonType>;
|
|
10
|
+
default: "default";
|
|
11
|
+
};
|
|
12
|
+
size: {
|
|
13
|
+
type: PropType<SqlButtonSize>;
|
|
14
|
+
default: "large";
|
|
15
|
+
};
|
|
16
|
+
nativeType: {
|
|
17
|
+
type: PropType<SqlButtonNativeType>;
|
|
18
|
+
default: "button";
|
|
19
|
+
};
|
|
20
|
+
selected: {
|
|
21
|
+
type: PropType<boolean | null>;
|
|
22
|
+
default: null;
|
|
23
|
+
};
|
|
24
|
+
loading: BooleanConstructor;
|
|
25
|
+
disabled: BooleanConstructor;
|
|
26
|
+
plain: BooleanConstructor;
|
|
27
|
+
autofocus: BooleanConstructor;
|
|
28
|
+
round: BooleanConstructor;
|
|
29
|
+
circle: BooleanConstructor;
|
|
30
|
+
}>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
31
|
+
click: (event: MouseEvent) => any;
|
|
32
|
+
}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
33
|
+
type: {
|
|
34
|
+
type: PropType<SqlButtonType>;
|
|
35
|
+
default: "default";
|
|
36
|
+
};
|
|
37
|
+
size: {
|
|
38
|
+
type: PropType<SqlButtonSize>;
|
|
39
|
+
default: "large";
|
|
40
|
+
};
|
|
41
|
+
nativeType: {
|
|
42
|
+
type: PropType<SqlButtonNativeType>;
|
|
43
|
+
default: "button";
|
|
44
|
+
};
|
|
45
|
+
selected: {
|
|
46
|
+
type: PropType<boolean | null>;
|
|
47
|
+
default: null;
|
|
48
|
+
};
|
|
49
|
+
loading: BooleanConstructor;
|
|
50
|
+
disabled: BooleanConstructor;
|
|
51
|
+
plain: BooleanConstructor;
|
|
52
|
+
autofocus: BooleanConstructor;
|
|
53
|
+
round: BooleanConstructor;
|
|
54
|
+
circle: BooleanConstructor;
|
|
55
|
+
}>> & Readonly<{
|
|
56
|
+
onClick?: ((event: MouseEvent) => any) | undefined;
|
|
57
|
+
}>, {
|
|
58
|
+
type: SqlButtonType;
|
|
59
|
+
size: SqlButtonSize;
|
|
60
|
+
circle: boolean;
|
|
61
|
+
nativeType: SqlButtonNativeType;
|
|
62
|
+
selected: boolean | null;
|
|
63
|
+
loading: boolean;
|
|
64
|
+
disabled: boolean;
|
|
65
|
+
plain: boolean;
|
|
66
|
+
autofocus: boolean;
|
|
67
|
+
round: boolean;
|
|
68
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
69
|
+
declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
|
|
70
|
+
export default _default;
|
|
71
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
72
|
+
new (): {
|
|
73
|
+
$slots: S;
|
|
74
|
+
};
|
|
75
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare const SQL_SPINNER_THEME_MODES: {
|
|
2
|
+
readonly LIGHT: "light";
|
|
3
|
+
readonly DARK: "dark";
|
|
4
|
+
};
|
|
5
|
+
export type SqlSpinnerThemeMode = (typeof SQL_SPINNER_THEME_MODES)[keyof typeof SQL_SPINNER_THEME_MODES];
|
|
6
|
+
export declare const SQL_SPINNER_SIZES: {
|
|
7
|
+
readonly SMALL: "small";
|
|
8
|
+
readonly MEDIUM: "medium";
|
|
9
|
+
readonly LARGE: "large";
|
|
10
|
+
};
|
|
11
|
+
export type SqlSpinnerSize = (typeof SQL_SPINNER_SIZES)[keyof typeof SQL_SPINNER_SIZES];
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { type PropType } from 'vue';
|
|
2
|
+
import { type SqlSpinnerSize, type SqlSpinnerThemeMode } from './SqlSpinner.types';
|
|
3
|
+
declare const _default: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
4
|
+
type: {
|
|
5
|
+
type: PropType<SqlSpinnerThemeMode>;
|
|
6
|
+
default: "dark";
|
|
7
|
+
};
|
|
8
|
+
size: {
|
|
9
|
+
type: PropType<SqlSpinnerSize>;
|
|
10
|
+
default: "small";
|
|
11
|
+
};
|
|
12
|
+
label: {
|
|
13
|
+
type: StringConstructor;
|
|
14
|
+
default: string;
|
|
15
|
+
};
|
|
16
|
+
}>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
17
|
+
type: {
|
|
18
|
+
type: PropType<SqlSpinnerThemeMode>;
|
|
19
|
+
default: "dark";
|
|
20
|
+
};
|
|
21
|
+
size: {
|
|
22
|
+
type: PropType<SqlSpinnerSize>;
|
|
23
|
+
default: "small";
|
|
24
|
+
};
|
|
25
|
+
label: {
|
|
26
|
+
type: StringConstructor;
|
|
27
|
+
default: string;
|
|
28
|
+
};
|
|
29
|
+
}>> & Readonly<{}>, {
|
|
30
|
+
type: SqlSpinnerThemeMode;
|
|
31
|
+
size: SqlSpinnerSize;
|
|
32
|
+
label: string;
|
|
33
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
34
|
+
export default _default;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@salesql/sql_components_vue3",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Librería de componentes Vue 3 (SalesQL)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.cjs",
|
|
@@ -28,21 +28,27 @@
|
|
|
28
28
|
"devDependencies": {
|
|
29
29
|
"@histoire/plugin-vue": "1.0.0-alpha.3",
|
|
30
30
|
"@vitejs/plugin-vue": "^6.0.1",
|
|
31
|
+
"@vitest/coverage-v8": "^3.2.0",
|
|
32
|
+
"@vue/test-utils": "^2.4.6",
|
|
31
33
|
"flexsearch": "^0.8.212",
|
|
32
34
|
"histoire": "1.0.0-alpha.3",
|
|
35
|
+
"jsdom": "^26.1.0",
|
|
33
36
|
"sass": "^1.93.2",
|
|
34
37
|
"shiki": "^3.13.0",
|
|
35
38
|
"vite": "^7.1.7",
|
|
39
|
+
"vitest": "^3.2.0",
|
|
36
40
|
"vscode-oniguruma": "^2.0.1",
|
|
37
41
|
"vscode-textmate": "^9.2.0",
|
|
38
42
|
"vue": "^3.5.0",
|
|
39
43
|
"vue-tsc": "^2.2.12"
|
|
40
44
|
},
|
|
41
45
|
"publishConfig": {
|
|
42
|
-
"access": "public"
|
|
46
|
+
"access": "public",
|
|
47
|
+
"registry": "https://registry.npmjs.org",
|
|
48
|
+
"provenance": false
|
|
43
49
|
},
|
|
44
50
|
"engines": {
|
|
45
|
-
"node": "
|
|
51
|
+
"node": "^24.0.0"
|
|
46
52
|
},
|
|
47
53
|
"repository": {
|
|
48
54
|
"type": "git",
|
|
@@ -53,9 +59,13 @@
|
|
|
53
59
|
},
|
|
54
60
|
"homepage": "https://github.com/salesql/salesql-components-library-vue3#readme",
|
|
55
61
|
"scripts": {
|
|
56
|
-
"build": "vue-tsc -p tsconfig.build.json --emitDeclarationOnly
|
|
62
|
+
"build": "vite build && vue-tsc -p tsconfig.build.json --emitDeclarationOnly",
|
|
57
63
|
"stories": "histoire dev",
|
|
64
|
+
"build:stories": "histoire build",
|
|
58
65
|
"typecheck": "vue-tsc --noEmit",
|
|
66
|
+
"test": "vitest run",
|
|
67
|
+
"test:watch": "vitest",
|
|
68
|
+
"test:coverage": "vitest run --coverage",
|
|
59
69
|
"changeset:version": "changeset version",
|
|
60
70
|
"changeset:publish": "changeset publish"
|
|
61
71
|
}
|