@wrrdev/fenix-ui 1.0.5 → 1.0.7
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 +314 -314
- package/dist/.nojekyll +0 -0
- package/dist/components/accordion/accordion.d.ts +72 -0
- package/dist/components/accordion/accordion.d.ts.map +1 -0
- package/dist/components/accordion/accordion.js +277 -0
- package/dist/components/accordion/accordion.js.map +1 -0
- package/dist/components/accordion/index.d.ts +2 -0
- package/dist/components/accordion/index.d.ts.map +1 -0
- package/dist/components/accordion/index.js +9 -0
- package/dist/components/accordion/index.js.map +1 -0
- package/dist/components/calendar/calendar.d.ts +2 -2
- package/dist/components/calendar/calendar.d.ts.map +1 -1
- package/dist/components/calendar/calendar.js +187 -89
- package/dist/components/calendar/calendar.js.map +1 -1
- package/dist/components/dropdown/dropdown.d.ts.map +1 -1
- package/dist/components/dropdown/dropdown.js +1 -1
- package/dist/components/dropdown/dropdown.js.map +1 -1
- package/dist/components/knob/index.d.ts +8 -0
- package/dist/components/knob/index.d.ts.map +1 -0
- package/dist/components/knob/index.js +7 -0
- package/dist/components/knob/index.js.map +1 -0
- package/dist/components/knob/knob.d.ts +51 -0
- package/dist/components/knob/knob.d.ts.map +1 -0
- package/dist/components/knob/knob.js +323 -0
- package/dist/components/knob/knob.js.map +1 -0
- package/dist/components/orderlist/index.d.ts +3 -0
- package/dist/components/orderlist/index.d.ts.map +1 -0
- package/dist/components/orderlist/index.js +7 -0
- package/dist/components/orderlist/index.js.map +1 -0
- package/dist/components/orderlist/orderlist.d.ts +78 -0
- package/dist/components/orderlist/orderlist.d.ts.map +1 -0
- package/dist/components/orderlist/orderlist.js +666 -0
- package/dist/components/orderlist/orderlist.js.map +1 -0
- package/dist/components/picklist/index.d.ts +3 -0
- package/dist/components/picklist/index.d.ts.map +1 -0
- package/dist/components/picklist/index.js +7 -0
- package/dist/components/picklist/index.js.map +1 -0
- package/dist/components/picklist/picklist.d.ts +102 -0
- package/dist/components/picklist/picklist.d.ts.map +1 -0
- package/dist/components/picklist/picklist.js +749 -0
- package/dist/components/picklist/picklist.js.map +1 -0
- package/dist/components/tooltip/directive.d.ts +31 -0
- package/dist/components/tooltip/directive.d.ts.map +1 -0
- package/dist/components/tooltip/directive.js +294 -0
- package/dist/components/tooltip/directive.js.map +1 -0
- package/dist/components/tooltip/index.d.ts +2 -1
- package/dist/components/tooltip/index.d.ts.map +1 -1
- package/dist/components/tooltip/index.js +4 -1
- package/dist/components/tooltip/index.js.map +1 -1
- package/dist/core/presets.d.ts.map +1 -1
- package/dist/core/presets.js +48 -9
- package/dist/core/presets.js.map +1 -1
- package/dist/core/tokens.d.ts.map +1 -1
- package/dist/core/tokens.js +4 -4
- package/dist/core/tokens.js.map +1 -1
- package/dist/docs/app.d.ts +3 -25
- package/dist/docs/app.d.ts.map +1 -1
- package/dist/docs/componentes/accordion.doc.d.ts +8 -0
- package/dist/docs/componentes/accordion.doc.d.ts.map +1 -0
- package/dist/docs/componentes/alert.doc.d.ts +8 -0
- package/dist/docs/componentes/alert.doc.d.ts.map +1 -0
- package/dist/docs/componentes/autocomplete.doc.d.ts +8 -0
- package/dist/docs/componentes/autocomplete.doc.d.ts.map +1 -0
- package/dist/docs/componentes/badge.doc.d.ts +8 -0
- package/dist/docs/componentes/badge.doc.d.ts.map +1 -0
- package/dist/docs/componentes/button.doc.d.ts +8 -0
- package/dist/docs/componentes/button.doc.d.ts.map +1 -0
- package/dist/docs/componentes/calendar.doc.d.ts +8 -0
- package/dist/docs/componentes/calendar.doc.d.ts.map +1 -0
- package/dist/docs/componentes/checkbox.doc.d.ts +8 -0
- package/dist/docs/componentes/checkbox.doc.d.ts.map +1 -0
- package/dist/docs/componentes/datepicker.doc.d.ts +8 -0
- package/dist/docs/componentes/datepicker.doc.d.ts.map +1 -0
- package/dist/docs/componentes/dialog.doc.d.ts +8 -0
- package/dist/docs/componentes/dialog.doc.d.ts.map +1 -0
- package/dist/docs/componentes/drawer.doc.d.ts +8 -0
- package/dist/docs/componentes/drawer.doc.d.ts.map +1 -0
- package/dist/docs/componentes/dropdown.doc.d.ts +8 -0
- package/dist/docs/componentes/dropdown.doc.d.ts.map +1 -0
- package/dist/docs/componentes/floatlabel.doc.d.ts +8 -0
- package/dist/docs/componentes/floatlabel.doc.d.ts.map +1 -0
- package/dist/docs/componentes/index.d.ts +10 -0
- package/dist/docs/componentes/index.d.ts.map +1 -0
- package/dist/docs/componentes/input.doc.d.ts +8 -0
- package/dist/docs/componentes/input.doc.d.ts.map +1 -0
- package/dist/docs/componentes/knob.doc.d.ts +8 -0
- package/dist/docs/componentes/knob.doc.d.ts.map +1 -0
- package/dist/docs/componentes/multiselect.doc.d.ts +8 -0
- package/dist/docs/componentes/multiselect.doc.d.ts.map +1 -0
- package/dist/docs/componentes/orderlist.doc.d.ts +8 -0
- package/dist/docs/componentes/orderlist.doc.d.ts.map +1 -0
- package/dist/docs/componentes/pagination.doc.d.ts +8 -0
- package/dist/docs/componentes/pagination.doc.d.ts.map +1 -0
- package/dist/docs/componentes/picklist.doc.d.ts +8 -0
- package/dist/docs/componentes/picklist.doc.d.ts.map +1 -0
- package/dist/docs/componentes/progress.doc.d.ts +8 -0
- package/dist/docs/componentes/progress.doc.d.ts.map +1 -0
- package/dist/docs/componentes/radio.doc.d.ts +8 -0
- package/dist/docs/componentes/radio.doc.d.ts.map +1 -0
- package/dist/docs/componentes/select.doc.d.ts +8 -0
- package/dist/docs/componentes/select.doc.d.ts.map +1 -0
- package/dist/docs/componentes/skeleton.doc.d.ts +8 -0
- package/dist/docs/componentes/skeleton.doc.d.ts.map +1 -0
- package/dist/docs/componentes/spinner.doc.d.ts +8 -0
- package/dist/docs/componentes/spinner.doc.d.ts.map +1 -0
- package/dist/docs/componentes/switch.doc.d.ts +8 -0
- package/dist/docs/componentes/switch.doc.d.ts.map +1 -0
- package/dist/docs/componentes/table.doc.d.ts +8 -0
- package/dist/docs/componentes/table.doc.d.ts.map +1 -0
- package/dist/docs/componentes/tabs.doc.d.ts +8 -0
- package/dist/docs/componentes/tabs.doc.d.ts.map +1 -0
- package/dist/docs/componentes/textarea.doc.d.ts +8 -0
- package/dist/docs/componentes/textarea.doc.d.ts.map +1 -0
- package/dist/docs/componentes/toast.doc.d.ts +8 -0
- package/dist/docs/componentes/toast.doc.d.ts.map +1 -0
- package/dist/docs/componentes/tooltip.doc.d.ts +25 -0
- package/dist/docs/componentes/tooltip.doc.d.ts.map +1 -0
- package/dist/docs/shared.d.ts +9 -0
- package/dist/docs/shared.d.ts.map +1 -0
- package/dist/docs/types.d.ts +47 -0
- package/dist/docs/types.d.ts.map +1 -0
- package/dist/fenix-ui.umd.min.js +815 -157
- package/dist/fenix-ui2.esm.js +2522 -103
- package/dist/fenix-ui2.esm.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -1
- package/package.json +212 -187
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"picklist.js","sources":["../../../src/components/picklist/picklist.ts"],"sourcesContent":["import { FxElement } from '../../core/base';\r\nimport { css } from '../../core/css';\r\nimport { defineElement } from '../../core/define';\r\n\r\nexport interface PickListItem {\r\n [key: string]: unknown;\r\n}\r\n\r\n/**\r\n * <fx-picklist> - Componente para transferir itens entre duas listas.\r\n *\r\n * Permite mover itens entre uma lista de origem e uma lista de destino.\r\n * Suporta filtro, seleção múltipla, checkbox e templates customizados.\r\n *\r\n * Atributos: source, target, source-key, target-key, filter, filter-by,\r\n * filter-placeholder, dragdrop, striped, selection-mode, source-label, target-label.\r\n * Evento: `move-to-target` (composed, detail: { items }).\r\n * Evento: `move-to-source` (composed, detail: { items }).\r\n * Evento: `selection-change-source` (composed, detail: { selection }).\r\n * Evento: `selection-change-target` (composed, detail: { selection }).\r\n */\r\nexport class FxPickList extends FxElement {\r\n static override styles = css`\r\n :host {\r\n display: block;\r\n font-family: var(--fx-font-family);\r\n font-size: var(--fx-font-size);\r\n --picklist-primary: var(--fx-color-primary, #3b82f6);\r\n --picklist-border: var(--fx-border-default, #e2e8f0);\r\n --picklist-bg: var(--fx-surface-background, #ffffff);\r\n --picklist-bg-hover: var(--fx-surface-surface-hover, #f1f5f9);\r\n --picklist-text: var(--fx-text-default, #1e293b);\r\n --picklist-text-muted: var(--fx-text-muted, #64748b);\r\n --picklist-radius: var(--fx-radius-md, 8px);\r\n --picklist-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\r\n --picklist-transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\r\n }\r\n * { box-sizing: border-box; }\r\n .container {\r\n display: flex;\r\n gap: var(--fx-space-sm, 8px);\r\n align-items: stretch;\r\n }\r\n .list-container {\r\n flex: 1;\r\n display: flex;\r\n flex-direction: column;\r\n gap: var(--fx-space-sm, 8px);\r\n min-width: 0;\r\n }\r\n .list-label {\r\n font-weight: 600;\r\n color: var(--picklist-text);\r\n font-size: calc(var(--fx-font-size) - 1px);\r\n }\r\n .select-all-bar {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n padding: var(--fx-space-sm, 10px) var(--fx-space-md, 14px);\r\n background: linear-gradient(135deg, var(--picklist-bg), var(--picklist-bg-hover));\r\n border: 1px solid var(--picklist-border);\r\n border-radius: var(--picklist-radius);\r\n font-size: 0.9em;\r\n font-weight: 500;\r\n }\r\n .select-all-bar label {\r\n display: flex;\r\n align-items: center;\r\n gap: var(--fx-space-sm, 10px);\r\n cursor: pointer;\r\n user-select: none;\r\n color: var(--picklist-text);\r\n }\r\n .select-all-bar input[type=\"checkbox\"] {\r\n width: 18px;\r\n height: 18px;\r\n accent-color: var(--picklist-primary);\r\n cursor: pointer;\r\n }\r\n .selection-count {\r\n font-size: 0.85em;\r\n color: var(--picklist-primary);\r\n background: color-mix(in srgb, var(--picklist-primary) 12%, transparent);\r\n padding: 4px 12px;\r\n border-radius: 20px;\r\n font-weight: 600;\r\n }\r\n .controls {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 4px;\r\n justify-content: center;\r\n padding: var(--fx-space-xs, 6px);\r\n background: var(--picklist-bg);\r\n border: 1px solid var(--picklist-border);\r\n border-radius: var(--picklist-radius);\r\n box-shadow: var(--picklist-shadow);\r\n height: fit-content;\r\n position: sticky;\r\n top: 0;\r\n align-self: center;\r\n }\r\n .control-group {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 3px;\r\n }\r\n .control-group + .control-group {\r\n margin-top: 4px;\r\n padding-top: 6px;\r\n border-top: 1px solid var(--picklist-border);\r\n }\r\n .list-wrapper {\r\n flex: 1;\r\n display: flex;\r\n flex-direction: column;\r\n gap: var(--fx-space-sm, 8px);\r\n }\r\n .filter-wrapper {\r\n margin-bottom: var(--fx-space-xs, 4px);\r\n }\r\n .filter-input {\r\n width: 100%;\r\n box-sizing: border-box;\r\n padding: var(--fx-space-sm, 10px) var(--fx-space-md, 14px);\r\n padding-left: 42px;\r\n border: 1.5px solid var(--picklist-border);\r\n border-radius: var(--picklist-radius);\r\n font-family: inherit;\r\n font-size: inherit;\r\n color: var(--picklist-text);\r\n background: var(--picklist-bg) url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%2394a3b8' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E\") no-repeat 14px center;\r\n transition: var(--picklist-transition);\r\n }\r\n .filter-input:focus {\r\n outline: none;\r\n border-color: var(--picklist-primary);\r\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--picklist-primary) 20%, transparent);\r\n }\r\n .filter-input::placeholder {\r\n color: var(--picklist-text-muted);\r\n }\r\n .list {\r\n list-style: none;\r\n margin: 0;\r\n padding: 0;\r\n border: 1px solid var(--picklist-border);\r\n border-radius: var(--picklist-radius);\r\n overflow: hidden;\r\n box-shadow: var(--picklist-shadow);\r\n min-height: 200px;\r\n max-height: 450px;\r\n overflow-y: auto;\r\n flex: 1;\r\n }\r\n .list::-webkit-scrollbar { width: 6px; }\r\n .list::-webkit-scrollbar-track { background: transparent; }\r\n .list::-webkit-scrollbar-thumb { background: var(--picklist-border); border-radius: 3px; }\r\n .list::-webkit-scrollbar-thumb:hover { background: var(--picklist-text-muted); }\r\n :host([striped]) .list-item:nth-child(even) {\r\n background: var(--fx-surface-surface, #f8fafc);\r\n }\r\n .list-item {\r\n display: flex;\r\n align-items: center;\r\n gap: var(--fx-space-sm, 10px);\r\n padding: var(--fx-space-sm, 10px) var(--fx-space-md, 14px);\r\n background: var(--picklist-bg);\r\n border-bottom: 1px solid var(--picklist-border);\r\n cursor: pointer;\r\n user-select: none;\r\n transition: var(--picklist-transition);\r\n }\r\n .list-item:last-child { border-bottom: none; }\r\n .list-item:hover { background: var(--picklist-bg-hover); }\r\n .list-item.selected {\r\n background: color-mix(in srgb, var(--picklist-primary) 8%, transparent);\r\n border-left: 3px solid var(--picklist-primary);\r\n padding-left: 11px;\r\n }\r\n .list-item:focus-visible {\r\n outline: none;\r\n background: color-mix(in srgb, var(--picklist-primary) 15%, transparent);\r\n }\r\n .checkbox {\r\n flex-shrink: 0;\r\n width: 18px;\r\n height: 18px;\r\n accent-color: var(--picklist-primary);\r\n cursor: pointer;\r\n transition: var(--picklist-transition);\r\n }\r\n .checkbox:hover { transform: scale(1.1); }\r\n .item-content {\r\n flex: 1;\r\n min-width: 0;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n }\r\n .empty-message {\r\n padding: var(--fx-space-xl, 32px);\r\n text-align: center;\r\n color: var(--picklist-text-muted);\r\n font-style: italic;\r\n }\r\n button.control-btn {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 42px;\r\n height: 38px;\r\n padding: 0;\r\n border: none;\r\n border-radius: 8px;\r\n background: transparent;\r\n color: var(--picklist-text-muted);\r\n cursor: pointer;\r\n font-size: 16px;\r\n line-height: 1;\r\n transition: var(--picklist-transition);\r\n position: relative;\r\n }\r\n button.control-btn:hover:not(:disabled) {\r\n background: var(--picklist-bg-hover);\r\n color: var(--picklist-primary);\r\n transform: scale(1.1);\r\n }\r\n button.control-btn:active:not(:disabled) {\r\n transform: scale(0.92);\r\n background: color-mix(in srgb, var(--picklist-primary) 15%, transparent);\r\n }\r\n button.control-btn:focus-visible {\r\n outline: none;\r\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--picklist-primary) 30%, transparent);\r\n }\r\n button.control-btn:disabled {\r\n opacity: 0.3;\r\n cursor: not-allowed;\r\n transform: none;\r\n }\r\n .control-btn-icon { font-size: 18px; line-height: 1; }\r\n\r\n button.control-btn:hover::after {\r\n opacity: 1;\r\n transform: translateX(-50%) translateY(0);\r\n }\r\n @media (max-width: 640px) {\r\n .container { flex-direction: column; }\r\n .controls {\r\n flex-direction: row;\r\n flex-wrap: wrap;\r\n justify-content: center;\r\n position: relative;\r\n }\r\n .control-group { flex-direction: row; }\r\n .control-group + .control-group {\r\n margin-top: 0;\r\n margin-left: 4px;\r\n padding-top: 0;\r\n padding-left: 4px;\r\n border-top: none;\r\n border-left: 1px solid var(--picklist-border);\r\n }\r\n button.control-btn { width: 44px; height: 40px; }\r\n button.control-btn::after { display: none; }\r\n .list { max-height: 300px; min-height: 150px; }\r\n }\r\n @keyframes slideIn {\r\n from { opacity: 0; transform: translateX(-10px); }\r\n to { opacity: 1; transform: translateX(0); }\r\n }\r\n .list-item { animation: slideIn 0.2s ease-out; }\r\n `;\r\n\r\n static override get observedAttributes(): string[] {\r\n return [\r\n 'source',\r\n 'target',\r\n 'source-key',\r\n 'target-key',\r\n 'filter',\r\n 'filter-by',\r\n 'filter-placeholder',\r\n 'dragdrop',\r\n 'striped',\r\n 'selection-mode',\r\n 'show-select-all',\r\n 'source-label',\r\n 'target-label',\r\n ];\r\n }\r\n\r\n set source(value: PickListItem[]) {\r\n this._source = value;\r\n this._filteredSource = null;\r\n this.render();\r\n }\r\n get source(): PickListItem[] {\r\n return this._source;\r\n }\r\n private _source: PickListItem[] = [];\r\n private _filteredSource: PickListItem[] | null = null;\r\n\r\n set target(value: PickListItem[]) {\r\n this._target = value;\r\n this._filteredTarget = null;\r\n this.render();\r\n }\r\n get target(): PickListItem[] {\r\n return this._target;\r\n }\r\n private _target: PickListItem[] = [];\r\n private _filteredTarget: PickListItem[] | null = null;\r\n\r\n set sourceSelection(value: PickListItem[]) {\r\n this._sourceSelection = value;\r\n this.render();\r\n }\r\n get sourceSelection(): PickListItem[] {\r\n return this._sourceSelection;\r\n }\r\n private _sourceSelection: PickListItem[] = [];\r\n\r\n set targetSelection(value: PickListItem[]) {\r\n this._targetSelection = value;\r\n this.render();\r\n }\r\n get targetSelection(): PickListItem[] {\r\n return this._targetSelection;\r\n }\r\n private _targetSelection: PickListItem[] = [];\r\n\r\n get sourceKey(): string {\r\n return this.getAttr('source-key', '');\r\n }\r\n set sourceKey(v: string) {\r\n this.setAttribute('source-key', v);\r\n }\r\n\r\n get targetKey(): string {\r\n return this.getAttr('target-key', '');\r\n }\r\n set targetKey(v: string) {\r\n this.setAttribute('target-key', v);\r\n }\r\n\r\n get filter(): boolean {\r\n return this.hasAttr('filter');\r\n }\r\n set filter(v: boolean) {\r\n this.toggleAttr('filter', v);\r\n }\r\n\r\n get filterBy(): string {\r\n return this.getAttr('filter-by', 'label');\r\n }\r\n set filterBy(v: string) {\r\n this.setAttribute('filter-by', v);\r\n }\r\n\r\n get filterPlaceholder(): string {\r\n return this.getAttr('filter-placeholder', 'Buscar...');\r\n }\r\n set filterPlaceholder(v: string) {\r\n this.setAttribute('filter-placeholder', v);\r\n }\r\n\r\n get dragdrop(): boolean {\r\n return this.hasAttr('dragdrop');\r\n }\r\n set dragdrop(v: boolean) {\r\n this.toggleAttr('dragdrop', v);\r\n }\r\n\r\n get striped(): boolean {\r\n return this.hasAttr('striped');\r\n }\r\n set striped(v: boolean) {\r\n this.toggleAttr('striped', v);\r\n }\r\n\r\n get selectionMode(): string {\r\n const s = this.getAttr('selection-mode', '');\r\n return s === 'single' || s === 'multiple' ? s : '';\r\n }\r\n set selectionMode(v: string) {\r\n this.setAttribute('selection-mode', v);\r\n }\r\n\r\n get showSelectAll(): boolean {\r\n return this.hasAttr('show-select-all');\r\n }\r\n set showSelectAll(v: boolean) {\r\n this.toggleAttr('show-select-all', v);\r\n }\r\n\r\n get sourceLabel(): string {\r\n return this.getAttr('source-label', 'Disponíveis');\r\n }\r\n set sourceLabel(v: string) {\r\n this.setAttribute('source-label', v);\r\n }\r\n\r\n get targetLabel(): string {\r\n return this.getAttr('target-label', 'Selecionados');\r\n }\r\n set targetLabel(v: string) {\r\n this.setAttribute('target-label', v);\r\n }\r\n\r\n get sourceFilterValue(): string {\r\n return this._sourceFilterValue;\r\n }\r\n set sourceFilterValue(v: string) {\r\n this._sourceFilterValue = v;\r\n this._applySourceFilter();\r\n this._updateListDisplay();\r\n }\r\n private _sourceFilterValue = '';\r\n\r\n get targetFilterValue(): string {\r\n return this._targetFilterValue;\r\n }\r\n set targetFilterValue(v: string) {\r\n this._targetFilterValue = v;\r\n this._applyTargetFilter();\r\n this._updateListDisplay();\r\n }\r\n private _targetFilterValue = '';\r\n private _filterListenersAttached = false;\r\n\r\n private _optionTemplate: ((item: PickListItem) => string) | null = null;\r\n\r\n setOptionTemplate(template: (item: PickListItem) => string): void {\r\n this._optionTemplate = template;\r\n this.render();\r\n }\r\n\r\n protected override connectedCallback(): void {\r\n this._parseSourceAttribute();\r\n this._parseTargetAttribute();\r\n super.connectedCallback();\r\n }\r\n\r\n protected override attributeChangedCallback(): void {\r\n if (this.getAttr('source', '') !== '') {\r\n this._parseSourceAttribute();\r\n }\r\n if (this.getAttr('target', '') !== '') {\r\n this._parseTargetAttribute();\r\n }\r\n super.attributeChangedCallback();\r\n }\r\n\r\n private _parseSourceAttribute(): void {\r\n const dataAttr = this.getAttr('source', '');\r\n if (dataAttr) {\r\n try {\r\n this._source = JSON.parse(dataAttr);\r\n this._filteredSource = null;\r\n } catch {\r\n this._source = [];\r\n }\r\n }\r\n }\r\n\r\n private _parseTargetAttribute(): void {\r\n const dataAttr = this.getAttr('target', '');\r\n if (dataAttr) {\r\n try {\r\n this._target = JSON.parse(dataAttr);\r\n this._filteredTarget = null;\r\n } catch {\r\n this._target = [];\r\n }\r\n }\r\n }\r\n\r\n private _applySourceFilter(): void {\r\n if (!this._sourceFilterValue) {\r\n this._filteredSource = null;\r\n return;\r\n }\r\n const filterFields = this.filterBy.split(',').map(f => f.trim());\r\n this._filteredSource = this._source.filter(item => {\r\n return filterFields.some(field => {\r\n const value = item[field];\r\n if (value == null) return false;\r\n return String(value).toLowerCase().includes(this._sourceFilterValue.toLowerCase());\r\n });\r\n });\r\n }\r\n\r\n private _applyTargetFilter(): void {\r\n if (!this._targetFilterValue) {\r\n this._filteredTarget = null;\r\n return;\r\n }\r\n const filterFields = this.filterBy.split(',').map(f => f.trim());\r\n this._filteredTarget = this._target.filter(item => {\r\n return filterFields.some(field => {\r\n const value = item[field];\r\n if (value == null) return false;\r\n return String(value).toLowerCase().includes(this._targetFilterValue.toLowerCase());\r\n });\r\n });\r\n }\r\n\r\n private _getDisplaySource(): PickListItem[] {\r\n return this._filteredSource || this._source;\r\n }\r\n\r\n private _getDisplayTarget(): PickListItem[] {\r\n return this._filteredTarget || this._target;\r\n }\r\n\r\n private _getItemKey(item: PickListItem, index: number, isSource: boolean): string {\r\n const keyField = isSource ? this.sourceKey : this.targetKey;\r\n if (keyField && item[keyField] != null) {\r\n return String(item[keyField]);\r\n }\r\n if (item['id'] != null) return String(item['id']);\r\n if (item['key'] != null) return String(item['key']);\r\n if (item['label'] != null) return String(item['label']);\r\n if (item['name'] != null) return String(item['name']);\r\n if (item['value'] != null) return String(item['value']);\r\n return String(index);\r\n }\r\n\r\n private _getItemLabel(item: PickListItem): string {\r\n const fields = ['label', 'name', 'title', 'text', 'value'];\r\n for (const field of fields) {\r\n if (item[field] != null) {\r\n return String(item[field]);\r\n }\r\n }\r\n return JSON.stringify(item);\r\n }\r\n\r\n private _isSourceSelected(item: PickListItem, index: number): boolean {\r\n return this._sourceSelection.some(s => this._getItemKey(s, -1, true) === this._getItemKey(item, index, true));\r\n }\r\n\r\n private _isTargetSelected(item: PickListItem, index: number): boolean {\r\n return this._targetSelection.some(s => this._getItemKey(s, -1, false) === this._getItemKey(item, index, false));\r\n }\r\n\r\n private _emitMoveToTarget(): void {\r\n this.dispatchEvent(new CustomEvent('move-to-target', {\r\n bubbles: true,\r\n composed: true,\r\n detail: { items: [...this._sourceSelection], source: [...this._source], target: [...this._target] },\r\n }));\r\n }\r\n\r\n private _emitMoveToSource(): void {\r\n this.dispatchEvent(new CustomEvent('move-to-source', {\r\n bubbles: true,\r\n composed: true,\r\n detail: { items: [...this._targetSelection], source: [...this._source], target: [...this._target] },\r\n }));\r\n }\r\n\r\n private _emitSelectionChangeSource(): void {\r\n this.dispatchEvent(new CustomEvent('selection-change-source', {\r\n bubbles: true,\r\n composed: true,\r\n detail: { selection: [...this._sourceSelection] },\r\n }));\r\n }\r\n\r\n private _emitSelectionChangeTarget(): void {\r\n this.dispatchEvent(new CustomEvent('selection-change-target', {\r\n bubbles: true,\r\n composed: true,\r\n detail: { selection: [...this._targetSelection] },\r\n }));\r\n }\r\n\r\n protected override render(): void {\r\n const dSrc = this._getDisplaySource();\r\n const dTgt = this._getDisplayTarget();\r\n const hasSel = this.selectionMode;\r\n const showAll = hasSel === 'multiple' && this.showSelectAll;\r\n const srcItems = dSrc.length === 0 ? `<li class=\"empty-message\">${this.filter ? 'Nenhum resultado' : 'Nenhum item'}</li>` : dSrc.map((item, i) => `<li class=\"list-item${this._isSourceSelected(item, i) ? ' selected' : ''}\" data-index=\"${i}\" data-list=\"source\" tabindex=\"0\">${hasSel ? '<input type=\"checkbox\" class=\"checkbox\"' + (this._isSourceSelected(item, i) ? ' checked' : '') + ' />' : ''}<span class=\"item-content\">${this._optionTemplate ? this._optionTemplate(item) : esc(this._getItemLabel(item))}</span></li>`).join('');\r\n const tgtItems = dTgt.length === 0 ? `<li class=\"empty-message\">${this.filter ? 'Nenhum resultado' : 'Nenhum selecionado'}</li>` : dTgt.map((item, i) => `<li class=\"list-item${this._isTargetSelected(item, i) ? ' selected' : ''}\" data-index=\"${i}\" data-list=\"target\" tabindex=\"0\">${hasSel ? '<input type=\"checkbox\" class=\"checkbox\"' + (this._isTargetSelected(item, i) ? ' checked' : '') + ' />' : ''}<span class=\"item-content\">${this._optionTemplate ? this._optionTemplate(item) : esc(this._getItemLabel(item))}</span></li>`).join('');\r\n const srcAllBar = showAll ? `<div class=\"select-all-bar\" part=\"select-all-bar\"><label><input type=\"checkbox\" class=\"select-all-checkbox\" data-list=\"source\" ${this._sourceSelection.length > 0 && this._sourceSelection.length === this._source.length ? 'checked' : ''} aria-label=\"Selecionar todos da origem\" /> Selecionar Todos</label><span class=\"selection-count\">${this._sourceSelection.length} selecionado(s)</span></div>` : '';\r\n const tgtAllBar = showAll ? `<div class=\"select-all-bar\" part=\"select-all-bar\"><label><input type=\"checkbox\" class=\"select-all-checkbox\" data-list=\"target\" ${this._targetSelection.length > 0 && this._targetSelection.length === this._target.length ? 'checked' : ''} aria-label=\"Selecionar todos do destino\" /> Selecionar Todos</label><span class=\"selection-count\">${this._targetSelection.length} selecionado(s)</span></div>` : '';\r\n\r\n this.setTemplate(`<div class=\"container\"><div class=\"list-container\"><div class=\"list-label\">${esc(this.sourceLabel)} (${this._source.length})</div>${this.filter ? '<div class=\"filter-wrapper\"><input type=\"text\" class=\"filter-input source-filter\" placeholder=\"' + this.filterPlaceholder + '\" value=\"' + esc(this._sourceFilterValue) + '\" /></div>' : ''}${srcAllBar}<div class=\"list-wrapper\"><ul class=\"list source-list\" role=\"listbox\" tabindex=\"0\">${srcItems}</ul></div></div><div class=\"controls\"><div class=\"control-group\"><button class=\"control-btn\" data-action=\"move-all-target\" part=\"control-btn\" aria-label=\"Mover todos para destino\"><span class=\"control-btn-icon\">»</span></button><button class=\"control-btn\" data-action=\"move-target\" part=\"control-btn\" aria-label=\"Mover para destino\"><span class=\"control-btn-icon\">→</span></button></div><div class=\"control-group\"><button class=\"control-btn\" data-action=\"move-source\" part=\"control-btn\" aria-label=\"Mover para origem\"><span class=\"control-btn-icon\">←</span></button><button class=\"control-btn\" data-action=\"move-all-source\" part=\"control-btn\" aria-label=\"Mover todos para origem\"><span class=\"control-btn-icon\">«</span></button></div></div><div class=\"list-container\"><div class=\"list-label\">${esc(this.targetLabel)} (${this._target.length})</div>${this.filter ? '<div class=\"filter-wrapper\"><input type=\"text\" class=\"filter-input target-filter\" placeholder=\"' + this.filterPlaceholder + '\" value=\"' + esc(this._targetFilterValue) + '\" /></div>' : ''}${tgtAllBar}<div class=\"list-wrapper\"><ul class=\"list target-list\" role=\"listbox\" tabindex=\"0\">${tgtItems}</ul></div></div></div>`);\r\n\r\n this._attachListeners();\r\n }\r\n\r\n private _attachListeners(): void {\r\n // Listeners delegados no root, anexados uma unica vez (sobrevivem a re-renders)\r\n if (!this._filterListenersAttached) {\r\n this._filterListenersAttached = true;\r\n\r\n this.root.addEventListener('input', (e) => {\r\n const t = e.target as HTMLElement;\r\n if (t.classList.contains('select-all-checkbox')) {\r\n this._handleSelectAll(t as HTMLInputElement);\r\n return;\r\n }\r\n if (t.classList.contains('source-filter')) {\r\n this.sourceFilterValue = (t as HTMLInputElement).value;\r\n } else if (t.classList.contains('target-filter')) {\r\n this.targetFilterValue = (t as HTMLInputElement).value;\r\n }\r\n });\r\n\r\n this.root.addEventListener('click', (e) => {\r\n const t = e.target as HTMLElement;\r\n const btn = t.closest('.control-btn') as HTMLButtonElement | null;\r\n if (btn) {\r\n switch (btn.dataset.action) {\r\n case 'move-target': this._moveToTarget(); break;\r\n case 'move-all-target': this._moveAllToTarget(); break;\r\n case 'move-source': this._moveToSource(); break;\r\n case 'move-all-source': this._moveAllToSource(); break;\r\n }\r\n return;\r\n }\r\n const el = t.closest('.list-item') as HTMLElement | null;\r\n if (!el) return;\r\n const isSrc = el.dataset.list === 'source';\r\n const idx = Number(el.dataset.index);\r\n const item = (isSrc ? this._getDisplaySource() : this._getDisplayTarget())[idx];\r\n if (isSrc) this._toggleSourceSelection(item, idx); else this._toggleTargetSelection(item, idx);\r\n });\r\n }\r\n this._updateControlsState();\r\n }\r\n\r\n private _handleSelectAll(checkbox: HTMLInputElement): void {\r\n const isSrc = checkbox.dataset.list === 'source';\r\n if (isSrc) {\r\n this._sourceSelection = checkbox.checked ? [...this._getDisplaySource()] : [];\r\n this._emitSelectionChangeSource();\r\n } else {\r\n this._targetSelection = checkbox.checked ? [...this._getDisplayTarget()] : [];\r\n this._emitSelectionChangeTarget();\r\n }\r\n this._updateSelectionDisplay();\r\n this._updateControlsState();\r\n }\r\n\r\n /**\r\n * Atualiza a selecao visual in-place (classes e checkboxes dos itens existentes),\r\n * sem recriar o DOM — mantendo referencias de elementos validas durante cliques.\r\n */\r\n private _updateSelectionDisplay(): void {\r\n const updateList = (listSel: HTMLElement | null, isSelFn: (item: PickListItem, i: number) => boolean, getData: () => PickListItem[]): void => {\r\n if (!listSel) return;\r\n listSel.querySelectorAll<HTMLElement>('.list-item').forEach(el => {\r\n const idx = Number(el.dataset.index);\r\n const selected = isSelFn(getData()[idx], idx);\r\n el.classList.toggle('selected', selected);\r\n el.setAttribute('aria-selected', String(selected));\r\n const cb = el.querySelector<HTMLInputElement>('.checkbox');\r\n if (cb) cb.checked = selected;\r\n });\r\n };\r\n updateList(this.root.querySelector('.source-list'), (it, i) => this._isSourceSelected(it, i), () => this._getDisplaySource());\r\n updateList(this.root.querySelector('.target-list'), (it, i) => this._isTargetSelected(it, i), () => this._getDisplayTarget());\r\n this._updateSelectAllBars();\r\n }\r\n\r\n /** Sincroniza as barras \"Selecionar Todos\" (checkbox + contador) sem re-render completo. */\r\n private _updateSelectAllBars(): void {\r\n if (!(this.selectionMode === 'multiple' && this.showSelectAll)) return;\r\n const bars = [\r\n { el: this.root.querySelector<HTMLInputElement>('.select-all-checkbox[data-list=\"source\"]'), total: this._source.length, sel: this._sourceSelection.length },\r\n { el: this.root.querySelector<HTMLInputElement>('.select-all-checkbox[data-list=\"target\"]'), total: this._target.length, sel: this._targetSelection.length },\r\n ];\r\n bars.forEach(({ el, total, sel }) => {\r\n if (!el) return;\r\n el.checked = total > 0 && sel === total;\r\n const count = el.closest('.select-all-bar')?.querySelector('.selection-count');\r\n if (count) count.textContent = `${sel} selecionado(s)`;\r\n });\r\n }\r\n\r\n private _updateControlsState(): void {\r\n this.root.querySelectorAll<HTMLButtonElement>('.control-btn').forEach(btn => {\r\n const a = btn.dataset.action;\r\n btn.disabled = (a === 'move-target' && this._sourceSelection.length === 0) || (a === 'move-all-target' && this._source.length === 0) || (a === 'move-source' && this._targetSelection.length === 0) || (a === 'move-all-source' && this._target.length === 0);\r\n });\r\n }\r\n\r\n private _moveToTarget(): void {\r\n if (!this._sourceSelection.length) return;\r\n const items = [...this._sourceSelection];\r\n this._source = this._source.filter(s => !items.some(i => this._getItemKey(i, -1, true) === this._getItemKey(s, -1, true)));\r\n this._target = [...this._target, ...items];\r\n this._sourceSelection = [];\r\n this._filteredSource = null;\r\n this._filteredTarget = null;\r\n this._updateListDisplay();\r\n this._updateControlsState();\r\n this._emitMoveToTarget();\r\n }\r\n\r\n private _moveToSource(): void {\r\n if (!this._targetSelection.length) return;\r\n const items = [...this._targetSelection];\r\n this._target = this._target.filter(t => !items.some(i => this._getItemKey(i, -1, false) === this._getItemKey(t, -1, false)));\r\n this._source = [...this._source, ...items];\r\n this._targetSelection = [];\r\n this._filteredSource = null;\r\n this._filteredTarget = null;\r\n this._updateListDisplay();\r\n this._updateControlsState();\r\n this._emitMoveToSource();\r\n }\r\n\r\n private _moveAllToTarget(): void {\r\n const items = [...this._source];\r\n this._source = [];\r\n this._target = [...this._target, ...items];\r\n this._sourceSelection = [];\r\n this._filteredSource = null;\r\n this._filteredTarget = null;\r\n this._updateListDisplay();\r\n this._updateControlsState();\r\n this._emitMoveToTarget();\r\n }\r\n\r\n private _moveAllToSource(): void {\r\n const items = [...this._target];\r\n this._target = [];\r\n this._source = [...this._source, ...items];\r\n this._targetSelection = [];\r\n this._filteredSource = null;\r\n this._filteredTarget = null;\r\n this._updateListDisplay();\r\n this._updateControlsState();\r\n this._emitMoveToSource();\r\n }\r\n\r\n private _toggleSourceSelection(item: PickListItem, index: number): void {\r\n // Sem selection-mode definido, permite selecao simples (um item por vez)\r\n const mode = this.selectionMode || 'single';\r\n const key = this._getItemKey(item, index, true);\r\n const idx = this._sourceSelection.findIndex(s => this._getItemKey(s, -1, true) === key);\r\n if (idx >= 0) {\r\n this._sourceSelection.splice(idx, 1);\r\n } else if (mode === 'multiple') {\r\n this._sourceSelection.push(item);\r\n } else {\r\n this._sourceSelection = [item];\r\n }\r\n this._emitSelectionChangeSource();\r\n this._updateSelectionDisplay();\r\n this._updateControlsState();\r\n }\r\n\r\n private _toggleTargetSelection(item: PickListItem, index: number): void {\r\n // Sem selection-mode definido, permite selecao simples (um item por vez)\r\n const mode = this.selectionMode || 'single';\r\n const key = this._getItemKey(item, index, false);\r\n const idx = this._targetSelection.findIndex(s => this._getItemKey(s, -1, false) === key);\r\n if (idx >= 0) {\r\n this._targetSelection.splice(idx, 1);\r\n } else if (mode === 'multiple') {\r\n this._targetSelection.push(item);\r\n } else {\r\n this._targetSelection = [item];\r\n }\r\n this._emitSelectionChangeTarget();\r\n this._updateSelectionDisplay();\r\n this._updateControlsState();\r\n }\r\n\r\n private _updateListDisplay(): void {\r\n const srcWrapper = this.root.querySelector('.source-list')?.parentElement;\r\n const tgtWrapper = this.root.querySelector('.target-list')?.parentElement;\r\n const srcLabel = this.root.querySelector('.list-container:first-of-type .list-label');\r\n const tgtLabel = this.root.querySelector('.list-container:last-of-type .list-label');\r\n if (!srcWrapper || !tgtWrapper) { this.render(); return; }\r\n const dSrc = this._getDisplaySource();\r\n const dTgt = this._getDisplayTarget();\r\n const hasSel = this.selectionMode;\r\n const srcItems = dSrc.length === 0 ? `<li class=\"empty-message\" part=\"empty-message\">${this.filter ? 'Nenhum resultado' : 'Nenhum item'}</li>` : dSrc.map((item, i) => `<li class=\"list-item${this._isSourceSelected(item, i) ? ' selected' : ''}\" part=\"list-item\" data-index=\"${i}\" data-list=\"source\" role=\"option\" aria-selected=\"${this._isSourceSelected(item, i)}\" tabindex=\"0\">${hasSel ? '<input type=\"checkbox\" class=\"checkbox\" part=\"checkbox\"' + (this._isSourceSelected(item, i) ? ' checked' : '') + ' />' : ''}<span class=\"item-content\" part=\"item-content\">${this._optionTemplate ? this._optionTemplate(item) : esc(this._getItemLabel(item))}</span></li>`).join('');\r\n const tgtItems = dTgt.length === 0 ? `<li class=\"empty-message\" part=\"empty-message\">${this.filter ? 'Nenhum resultado' : 'Nenhum selecionado'}</li>` : dTgt.map((item, i) => `<li class=\"list-item${this._isTargetSelected(item, i) ? ' selected' : ''}\" part=\"list-item\" data-index=\"${i}\" data-list=\"target\" role=\"option\" aria-selected=\"${this._isTargetSelected(item, i)}\" tabindex=\"0\">${hasSel ? '<input type=\"checkbox\" class=\"checkbox\" part=\"checkbox\"' + (this._isTargetSelected(item, i) ? ' checked' : '') + ' />' : ''}<span class=\"item-content\" part=\"item-content\">${this._optionTemplate ? this._optionTemplate(item) : esc(this._getItemLabel(item))}</span></li>`).join('');\r\n srcWrapper.innerHTML = `<ul class=\"list source-list\" role=\"listbox\" tabindex=\"0\">${srcItems}</ul>`;\r\n tgtWrapper.innerHTML = `<ul class=\"list target-list\" role=\"listbox\" tabindex=\"0\">${tgtItems}</ul>`;\r\n if (srcLabel) srcLabel.textContent = `${this.sourceLabel} (${this._source.length})`;\r\n if (tgtLabel) tgtLabel.textContent = `${this.targetLabel} (${this._target.length})`;\r\n this._updateSelectAllBars();\r\n this._attachListeners();\r\n }\r\n}\r\n\r\nfunction esc(s: string): string {\r\n return s.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');\r\n}\r\n\r\nexport function defineFxPickList(): typeof FxPickList {\r\n return defineElement('fx-picklist', FxPickList);\r\n}"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Diretiva fx-tooltip — Aplica tooltip em qualquer elemento HTML.
|
|
3
|
+
*
|
|
4
|
+
* Uso:
|
|
5
|
+
* <div fx-tooltip="Texto simples">Div com tooltip</div>
|
|
6
|
+
* <button fx-tooltip="Clique" fx-tooltip-position="bottom">Botão</button>
|
|
7
|
+
* <span fx-tooltip="<strong>HTML</strong>" fx-tooltip-html>Texto</span>
|
|
8
|
+
*
|
|
9
|
+
* Atributos:
|
|
10
|
+
* fx-tooltip — Conteúdo do tooltip (texto ou HTML)
|
|
11
|
+
* fx-tooltip-position — Posição: top | bottom | left | right (padrão: top)
|
|
12
|
+
* fx-tooltip-html — Se presente, trata o conteúdo como HTML
|
|
13
|
+
*/
|
|
14
|
+
export interface FxTooltipConfig {
|
|
15
|
+
position: 'top' | 'bottom' | 'left' | 'right';
|
|
16
|
+
html: boolean;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Inicializa a diretiva fx-tooltip.
|
|
20
|
+
* Deve ser chamado uma vez na aplicação.
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* import { defineFxTooltipDirective } from '@wrrdev/fenix-ui/tooltip';
|
|
24
|
+
* defineFxTooltipDirective();
|
|
25
|
+
*/
|
|
26
|
+
export declare function defineFxTooltipDirective(): void;
|
|
27
|
+
/**
|
|
28
|
+
* Destrói a diretiva fx-tooltip e limpa todos os recursos.
|
|
29
|
+
*/
|
|
30
|
+
export declare function destroyFxTooltipDirective(): void;
|
|
31
|
+
//# sourceMappingURL=directive.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"directive.d.ts","sourceRoot":"","sources":["../../../src/components/tooltip/directive.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;IAC9C,IAAI,EAAE,OAAO,CAAC;CACf;AAkTD;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,IAAI,IAAI,CAS/C;AAED;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,IAAI,CAEhD"}
|
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
const DEFAULT_CONFIG = {
|
|
2
|
+
position: "top"
|
|
3
|
+
};
|
|
4
|
+
class TooltipBehavior {
|
|
5
|
+
constructor(element) {
|
|
6
|
+
this.tooltipElement = null;
|
|
7
|
+
this.showTimeout = null;
|
|
8
|
+
this.hideTimeout = null;
|
|
9
|
+
this.show = () => {
|
|
10
|
+
if (this.hideTimeout) {
|
|
11
|
+
clearTimeout(this.hideTimeout);
|
|
12
|
+
this.hideTimeout = null;
|
|
13
|
+
}
|
|
14
|
+
this.showTimeout = window.setTimeout(() => {
|
|
15
|
+
if (this.tooltipElement) {
|
|
16
|
+
this.tooltipElement.classList.add("fx-tooltip-visible");
|
|
17
|
+
}
|
|
18
|
+
}, 100);
|
|
19
|
+
};
|
|
20
|
+
this.hide = () => {
|
|
21
|
+
if (this.showTimeout) {
|
|
22
|
+
clearTimeout(this.showTimeout);
|
|
23
|
+
this.showTimeout = null;
|
|
24
|
+
}
|
|
25
|
+
this.hideTimeout = window.setTimeout(() => {
|
|
26
|
+
if (this.tooltipElement) {
|
|
27
|
+
this.tooltipElement.classList.remove("fx-tooltip-visible");
|
|
28
|
+
}
|
|
29
|
+
}, 50);
|
|
30
|
+
};
|
|
31
|
+
this.element = element;
|
|
32
|
+
this.config = this.parseConfig();
|
|
33
|
+
this.init();
|
|
34
|
+
}
|
|
35
|
+
parseConfig() {
|
|
36
|
+
const position = this.element.getAttribute("fx-tooltip-position");
|
|
37
|
+
return {
|
|
38
|
+
position: position && ["top", "bottom", "left", "right"].includes(position) ? position : DEFAULT_CONFIG.position,
|
|
39
|
+
html: this.element.hasAttribute("fx-tooltip-html")
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
init() {
|
|
43
|
+
const computedStyle = window.getComputedStyle(this.element);
|
|
44
|
+
if (computedStyle.position === "static") {
|
|
45
|
+
this.element.style.position = "relative";
|
|
46
|
+
}
|
|
47
|
+
this.createTooltipElement();
|
|
48
|
+
this.element.addEventListener("mouseenter", this.show);
|
|
49
|
+
this.element.addEventListener("mouseleave", this.hide);
|
|
50
|
+
this.element.addEventListener("focus", this.show);
|
|
51
|
+
this.element.addEventListener("blur", this.hide);
|
|
52
|
+
}
|
|
53
|
+
createTooltipElement() {
|
|
54
|
+
const content = this.element.getAttribute("fx-tooltip");
|
|
55
|
+
if (!content) return;
|
|
56
|
+
this.tooltipElement = document.createElement("span");
|
|
57
|
+
this.tooltipElement.setAttribute("role", "tooltip");
|
|
58
|
+
this.tooltipElement.setAttribute("data-fx-tooltip", "");
|
|
59
|
+
this.tooltipElement.className = `fx-tooltip-bubble fx-tooltip-${this.config.position}`;
|
|
60
|
+
if (this.config.html) {
|
|
61
|
+
this.tooltipElement.innerHTML = content;
|
|
62
|
+
} else {
|
|
63
|
+
this.tooltipElement.textContent = content;
|
|
64
|
+
}
|
|
65
|
+
this.element.appendChild(this.tooltipElement);
|
|
66
|
+
}
|
|
67
|
+
update() {
|
|
68
|
+
this.config = this.parseConfig();
|
|
69
|
+
if (this.tooltipElement) {
|
|
70
|
+
this.tooltipElement.remove();
|
|
71
|
+
this.tooltipElement = null;
|
|
72
|
+
}
|
|
73
|
+
this.createTooltipElement();
|
|
74
|
+
}
|
|
75
|
+
destroy() {
|
|
76
|
+
this.element.removeEventListener("mouseenter", this.show);
|
|
77
|
+
this.element.removeEventListener("mouseleave", this.hide);
|
|
78
|
+
this.element.removeEventListener("focus", this.show);
|
|
79
|
+
this.element.removeEventListener("blur", this.hide);
|
|
80
|
+
if (this.showTimeout) clearTimeout(this.showTimeout);
|
|
81
|
+
if (this.hideTimeout) clearTimeout(this.hideTimeout);
|
|
82
|
+
if (this.tooltipElement) {
|
|
83
|
+
this.tooltipElement.remove();
|
|
84
|
+
this.tooltipElement = null;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
const _FxTooltipManager = class _FxTooltipManager {
|
|
89
|
+
constructor() {
|
|
90
|
+
this.observer = null;
|
|
91
|
+
this.behaviors = /* @__PURE__ */ new Map();
|
|
92
|
+
this.injectedStyles = null;
|
|
93
|
+
this.injectStyles();
|
|
94
|
+
this.observe();
|
|
95
|
+
this.processExistingElements();
|
|
96
|
+
}
|
|
97
|
+
static getInstance() {
|
|
98
|
+
if (!_FxTooltipManager.instance) {
|
|
99
|
+
_FxTooltipManager.instance = new _FxTooltipManager();
|
|
100
|
+
}
|
|
101
|
+
return _FxTooltipManager.instance;
|
|
102
|
+
}
|
|
103
|
+
injectStyles() {
|
|
104
|
+
if (document.getElementById("fx-tooltip-directive-styles")) return;
|
|
105
|
+
this.injectedStyles = document.createElement("style");
|
|
106
|
+
this.injectedStyles.id = "fx-tooltip-directive-styles";
|
|
107
|
+
this.injectedStyles.textContent = getTooltipStyles();
|
|
108
|
+
document.head.appendChild(this.injectedStyles);
|
|
109
|
+
}
|
|
110
|
+
observe() {
|
|
111
|
+
this.observer = new MutationObserver((mutations) => {
|
|
112
|
+
for (const mutation of mutations) {
|
|
113
|
+
if (mutation.type === "childList") {
|
|
114
|
+
mutation.addedNodes.forEach((node) => {
|
|
115
|
+
if (node instanceof HTMLElement) {
|
|
116
|
+
this.processElement(node);
|
|
117
|
+
node.querySelectorAll("[fx-tooltip]").forEach((el) => this.processElement(el));
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
if (mutation.type === "attributes" && mutation.target instanceof HTMLElement) {
|
|
122
|
+
const target = mutation.target;
|
|
123
|
+
if (target.hasAttribute("fx-tooltip")) {
|
|
124
|
+
this.processElement(target);
|
|
125
|
+
} else if (this.behaviors.has(target)) {
|
|
126
|
+
this.removeBehavior(target);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
this.observer.observe(document.body, {
|
|
132
|
+
childList: true,
|
|
133
|
+
subtree: true,
|
|
134
|
+
attributes: true,
|
|
135
|
+
attributeFilter: ["fx-tooltip", "fx-tooltip-position", "fx-tooltip-html"]
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
processExistingElements() {
|
|
139
|
+
document.querySelectorAll("[fx-tooltip]").forEach((el) => this.processElement(el));
|
|
140
|
+
}
|
|
141
|
+
processElement(element) {
|
|
142
|
+
if (!element.hasAttribute("fx-tooltip")) {
|
|
143
|
+
this.removeBehavior(element);
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
if (this.behaviors.has(element)) {
|
|
147
|
+
this.behaviors.get(element).update();
|
|
148
|
+
} else {
|
|
149
|
+
this.behaviors.set(element, new TooltipBehavior(element));
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
removeBehavior(element) {
|
|
153
|
+
const behavior = this.behaviors.get(element);
|
|
154
|
+
if (behavior) {
|
|
155
|
+
behavior.destroy();
|
|
156
|
+
this.behaviors.delete(element);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
destroy() {
|
|
160
|
+
if (this.observer) {
|
|
161
|
+
this.observer.disconnect();
|
|
162
|
+
this.observer = null;
|
|
163
|
+
}
|
|
164
|
+
this.behaviors.forEach((behavior) => behavior.destroy());
|
|
165
|
+
this.behaviors.clear();
|
|
166
|
+
if (this.injectedStyles) {
|
|
167
|
+
this.injectedStyles.remove();
|
|
168
|
+
this.injectedStyles = null;
|
|
169
|
+
}
|
|
170
|
+
_FxTooltipManager.instance = null;
|
|
171
|
+
}
|
|
172
|
+
};
|
|
173
|
+
_FxTooltipManager.instance = null;
|
|
174
|
+
let FxTooltipManager = _FxTooltipManager;
|
|
175
|
+
function getTooltipStyles() {
|
|
176
|
+
return (
|
|
177
|
+
/* css */
|
|
178
|
+
`
|
|
179
|
+
[fx-tooltip] {
|
|
180
|
+
position: relative;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
.fx-tooltip-bubble {
|
|
184
|
+
position: absolute;
|
|
185
|
+
background: var(--fx-text-default, #1e293b);
|
|
186
|
+
color: var(--fx-surface-background, #fff);
|
|
187
|
+
font-family: var(--fx-font-family, system-ui, -apple-system, sans-serif);
|
|
188
|
+
font-size: calc(var(--fx-font-size, 14px) - 2px);
|
|
189
|
+
line-height: 1.45;
|
|
190
|
+
padding: var(--fx-space-xs, 4px) var(--fx-space-md, 12px);
|
|
191
|
+
border-radius: var(--fx-radius-sm, 4px);
|
|
192
|
+
box-shadow: var(--fx-shadow-md, 0 4px 6px -1px rgba(0, 0, 0, 0.1));
|
|
193
|
+
width: max-content;
|
|
194
|
+
min-width: 60px;
|
|
195
|
+
max-width: var(--fx-tooltip-max-width, 320px);
|
|
196
|
+
white-space: normal;
|
|
197
|
+
text-align: center;
|
|
198
|
+
opacity: 0;
|
|
199
|
+
visibility: hidden;
|
|
200
|
+
transition: opacity var(--fx-motion-duration-fast, 150ms) var(--fx-motion-easing, ease);
|
|
201
|
+
z-index: var(--fx-z-tooltip, 1050);
|
|
202
|
+
pointer-events: none;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
.fx-tooltip-bubble.fx-tooltip-visible {
|
|
206
|
+
opacity: 1;
|
|
207
|
+
visibility: visible;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
.fx-tooltip-top {
|
|
211
|
+
bottom: calc(100% + 6px);
|
|
212
|
+
left: 50%;
|
|
213
|
+
transform: translateX(-50%);
|
|
214
|
+
}
|
|
215
|
+
.fx-tooltip-top::after {
|
|
216
|
+
content: '';
|
|
217
|
+
position: absolute;
|
|
218
|
+
top: 100%;
|
|
219
|
+
left: 50%;
|
|
220
|
+
transform: translateX(-50%);
|
|
221
|
+
border: 5px solid transparent;
|
|
222
|
+
border-top-color: var(--fx-text-default, #1e293b);
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
.fx-tooltip-bottom {
|
|
226
|
+
top: calc(100% + 6px);
|
|
227
|
+
left: 50%;
|
|
228
|
+
transform: translateX(-50%);
|
|
229
|
+
bottom: auto;
|
|
230
|
+
}
|
|
231
|
+
.fx-tooltip-bottom::after {
|
|
232
|
+
content: '';
|
|
233
|
+
position: absolute;
|
|
234
|
+
bottom: 100%;
|
|
235
|
+
left: 50%;
|
|
236
|
+
transform: translateX(-50%);
|
|
237
|
+
border: 5px solid transparent;
|
|
238
|
+
border-bottom-color: var(--fx-text-default, #1e293b);
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
.fx-tooltip-left {
|
|
242
|
+
right: calc(100% + 6px);
|
|
243
|
+
top: 50%;
|
|
244
|
+
transform: translateY(-50%);
|
|
245
|
+
left: auto;
|
|
246
|
+
bottom: auto;
|
|
247
|
+
}
|
|
248
|
+
.fx-tooltip-left::after {
|
|
249
|
+
content: '';
|
|
250
|
+
position: absolute;
|
|
251
|
+
top: 50%;
|
|
252
|
+
left: 100%;
|
|
253
|
+
transform: translateY(-50%);
|
|
254
|
+
border: 5px solid transparent;
|
|
255
|
+
border-left-color: var(--fx-text-default, #1e293b);
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
.fx-tooltip-right {
|
|
259
|
+
left: calc(100% + 6px);
|
|
260
|
+
top: 50%;
|
|
261
|
+
transform: translateY(-50%);
|
|
262
|
+
right: auto;
|
|
263
|
+
bottom: auto;
|
|
264
|
+
}
|
|
265
|
+
.fx-tooltip-right::after {
|
|
266
|
+
content: '';
|
|
267
|
+
position: absolute;
|
|
268
|
+
top: 50%;
|
|
269
|
+
right: 100%;
|
|
270
|
+
transform: translateY(-50%);
|
|
271
|
+
border: 5px solid transparent;
|
|
272
|
+
border-right-color: var(--fx-text-default, #1e293b);
|
|
273
|
+
}
|
|
274
|
+
`
|
|
275
|
+
);
|
|
276
|
+
}
|
|
277
|
+
function defineFxTooltipDirective() {
|
|
278
|
+
if (typeof window === "undefined") return;
|
|
279
|
+
if (document.readyState === "loading") {
|
|
280
|
+
document.addEventListener("DOMContentLoaded", () => {
|
|
281
|
+
FxTooltipManager.getInstance();
|
|
282
|
+
});
|
|
283
|
+
} else {
|
|
284
|
+
FxTooltipManager.getInstance();
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
function destroyFxTooltipDirective() {
|
|
288
|
+
FxTooltipManager.getInstance().destroy();
|
|
289
|
+
}
|
|
290
|
+
export {
|
|
291
|
+
defineFxTooltipDirective,
|
|
292
|
+
destroyFxTooltipDirective
|
|
293
|
+
};
|
|
294
|
+
//# sourceMappingURL=directive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"directive.js","sources":["../../../src/components/tooltip/directive.ts"],"sourcesContent":["/**\r\n * Diretiva fx-tooltip — Aplica tooltip em qualquer elemento HTML.\r\n *\r\n * Uso:\r\n * <div fx-tooltip=\"Texto simples\">Div com tooltip</div>\r\n * <button fx-tooltip=\"Clique\" fx-tooltip-position=\"bottom\">Botão</button>\r\n * <span fx-tooltip=\"<strong>HTML</strong>\" fx-tooltip-html>Texto</span>\r\n *\r\n * Atributos:\r\n * fx-tooltip — Conteúdo do tooltip (texto ou HTML)\r\n * fx-tooltip-position — Posição: top | bottom | left | right (padrão: top)\r\n * fx-tooltip-html — Se presente, trata o conteúdo como HTML\r\n */\r\n\r\nexport interface FxTooltipConfig {\r\n position: 'top' | 'bottom' | 'left' | 'right';\r\n html: boolean;\r\n}\r\n\r\nconst DEFAULT_CONFIG: FxTooltipConfig = {\r\n position: 'top',\r\n html: false,\r\n};\r\n\r\n/**\r\n * Classe que gerencia o comportamento de tooltip em um elemento.\r\n */\r\nclass TooltipBehavior {\r\n private element: HTMLElement;\r\n private tooltipElement: HTMLSpanElement | null = null;\r\n private config: FxTooltipConfig;\r\n private showTimeout: number | null = null;\r\n private hideTimeout: number | null = null;\r\n\r\n constructor(element: HTMLElement) {\r\n this.element = element;\r\n this.config = this.parseConfig();\r\n this.init();\r\n }\r\n\r\n private parseConfig(): FxTooltipConfig {\r\n const position = this.element.getAttribute('fx-tooltip-position') as FxTooltipConfig['position'];\r\n return {\r\n position: position && ['top', 'bottom', 'left', 'right'].includes(position) ? position : DEFAULT_CONFIG.position,\r\n html: this.element.hasAttribute('fx-tooltip-html'),\r\n };\r\n }\r\n\r\n private init(): void {\r\n const computedStyle = window.getComputedStyle(this.element);\r\n if (computedStyle.position === 'static') {\r\n this.element.style.position = 'relative';\r\n }\r\n this.createTooltipElement();\r\n this.element.addEventListener('mouseenter', this.show);\r\n this.element.addEventListener('mouseleave', this.hide);\r\n this.element.addEventListener('focus', this.show);\r\n this.element.addEventListener('blur', this.hide);\r\n }\r\n\r\n private createTooltipElement(): void {\r\n const content = this.element.getAttribute('fx-tooltip');\r\n if (!content) return;\r\n this.tooltipElement = document.createElement('span');\r\n this.tooltipElement.setAttribute('role', 'tooltip');\r\n this.tooltipElement.setAttribute('data-fx-tooltip', '');\r\n this.tooltipElement.className = `fx-tooltip-bubble fx-tooltip-${this.config.position}`;\r\n if (this.config.html) {\r\n this.tooltipElement.innerHTML = content;\r\n } else {\r\n this.tooltipElement.textContent = content;\r\n }\r\n this.element.appendChild(this.tooltipElement);\r\n }\r\n\r\n private show = (): void => {\r\n if (this.hideTimeout) {\r\n clearTimeout(this.hideTimeout);\r\n this.hideTimeout = null;\r\n }\r\n this.showTimeout = window.setTimeout(() => {\r\n if (this.tooltipElement) {\r\n this.tooltipElement.classList.add('fx-tooltip-visible');\r\n }\r\n }, 100);\r\n };\r\n\r\n private hide = (): void => {\r\n if (this.showTimeout) {\r\n clearTimeout(this.showTimeout);\r\n this.showTimeout = null;\r\n }\r\n this.hideTimeout = window.setTimeout(() => {\r\n if (this.tooltipElement) {\r\n this.tooltipElement.classList.remove('fx-tooltip-visible');\r\n }\r\n }, 50);\r\n };\r\n\r\n public update(): void {\r\n this.config = this.parseConfig();\r\n if (this.tooltipElement) {\r\n this.tooltipElement.remove();\r\n this.tooltipElement = null;\r\n }\r\n this.createTooltipElement();\r\n }\r\n\r\n public destroy(): void {\r\n this.element.removeEventListener('mouseenter', this.show);\r\n this.element.removeEventListener('mouseleave', this.hide);\r\n this.element.removeEventListener('focus', this.show);\r\n this.element.removeEventListener('blur', this.hide);\r\n if (this.showTimeout) clearTimeout(this.showTimeout);\r\n if (this.hideTimeout) clearTimeout(this.hideTimeout);\r\n if (this.tooltipElement) {\r\n this.tooltipElement.remove();\r\n this.tooltipElement = null;\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Gerencia todas as instâncias de tooltip no documento.\r\n */\r\nclass FxTooltipManager {\r\n private static instance: FxTooltipManager | null = null;\r\n private observer: MutationObserver | null = null;\r\n private behaviors: Map<HTMLElement, TooltipBehavior> = new Map();\r\n private injectedStyles: HTMLStyleElement | null = null;\r\n\r\n private constructor() {\r\n this.injectStyles();\r\n this.observe();\r\n this.processExistingElements();\r\n }\r\n\r\n public static getInstance(): FxTooltipManager {\r\n if (!FxTooltipManager.instance) {\r\n FxTooltipManager.instance = new FxTooltipManager();\r\n }\r\n return FxTooltipManager.instance;\r\n }\r\n\r\n private injectStyles(): void {\r\n if (document.getElementById('fx-tooltip-directive-styles')) return;\r\n this.injectedStyles = document.createElement('style');\r\n this.injectedStyles.id = 'fx-tooltip-directive-styles';\r\n this.injectedStyles.textContent = getTooltipStyles();\r\n document.head.appendChild(this.injectedStyles);\r\n }\r\n\r\n private observe(): void {\r\n this.observer = new MutationObserver((mutations) => {\r\n for (const mutation of mutations) {\r\n if (mutation.type === 'childList') {\r\n mutation.addedNodes.forEach((node) => {\r\n if (node instanceof HTMLElement) {\r\n this.processElement(node);\r\n node.querySelectorAll<HTMLElement>('[fx-tooltip]').forEach((el) => this.processElement(el));\r\n }\r\n });\r\n }\r\n if (mutation.type === 'attributes' && mutation.target instanceof HTMLElement) {\r\n const target = mutation.target;\r\n if (target.hasAttribute('fx-tooltip')) {\r\n this.processElement(target);\r\n } else if (this.behaviors.has(target)) {\r\n this.removeBehavior(target);\r\n }\r\n }\r\n }\r\n });\r\n this.observer.observe(document.body, {\r\n childList: true,\r\n subtree: true,\r\n attributes: true,\r\n attributeFilter: ['fx-tooltip', 'fx-tooltip-position', 'fx-tooltip-html'],\r\n });\r\n }\r\n\r\n private processExistingElements(): void {\r\n document.querySelectorAll<HTMLElement>('[fx-tooltip]').forEach((el) => this.processElement(el));\r\n }\r\n\r\n private processElement(element: HTMLElement): void {\r\n if (!element.hasAttribute('fx-tooltip')) {\r\n this.removeBehavior(element);\r\n return;\r\n }\r\n if (this.behaviors.has(element)) {\r\n this.behaviors.get(element)!.update();\r\n } else {\r\n this.behaviors.set(element, new TooltipBehavior(element));\r\n }\r\n }\r\n\r\n private removeBehavior(element: HTMLElement): void {\r\n const behavior = this.behaviors.get(element);\r\n if (behavior) {\r\n behavior.destroy();\r\n this.behaviors.delete(element);\r\n }\r\n }\r\n\r\n public destroy(): void {\r\n if (this.observer) {\r\n this.observer.disconnect();\r\n this.observer = null;\r\n }\r\n this.behaviors.forEach((behavior) => behavior.destroy());\r\n this.behaviors.clear();\r\n if (this.injectedStyles) {\r\n this.injectedStyles.remove();\r\n this.injectedStyles = null;\r\n }\r\n FxTooltipManager.instance = null;\r\n }\r\n}\r\n\r\n/**\r\n * Retorna os estilos CSS para os tooltips.\r\n */\r\nfunction getTooltipStyles(): string {\r\n return /* css */ `\r\n [fx-tooltip] {\r\n position: relative;\r\n }\r\n\r\n .fx-tooltip-bubble {\r\n position: absolute;\r\n background: var(--fx-text-default, #1e293b);\r\n color: var(--fx-surface-background, #fff);\r\n font-family: var(--fx-font-family, system-ui, -apple-system, sans-serif);\r\n font-size: calc(var(--fx-font-size, 14px) - 2px);\r\n line-height: 1.45;\r\n padding: var(--fx-space-xs, 4px) var(--fx-space-md, 12px);\r\n border-radius: var(--fx-radius-sm, 4px);\r\n box-shadow: var(--fx-shadow-md, 0 4px 6px -1px rgba(0, 0, 0, 0.1));\r\n width: max-content;\r\n min-width: 60px;\r\n max-width: var(--fx-tooltip-max-width, 320px);\r\n white-space: normal;\r\n text-align: center;\r\n opacity: 0;\r\n visibility: hidden;\r\n transition: opacity var(--fx-motion-duration-fast, 150ms) var(--fx-motion-easing, ease);\r\n z-index: var(--fx-z-tooltip, 1050);\r\n pointer-events: none;\r\n }\r\n\r\n .fx-tooltip-bubble.fx-tooltip-visible {\r\n opacity: 1;\r\n visibility: visible;\r\n }\r\n\r\n .fx-tooltip-top {\r\n bottom: calc(100% + 6px);\r\n left: 50%;\r\n transform: translateX(-50%);\r\n }\r\n .fx-tooltip-top::after {\r\n content: '';\r\n position: absolute;\r\n top: 100%;\r\n left: 50%;\r\n transform: translateX(-50%);\r\n border: 5px solid transparent;\r\n border-top-color: var(--fx-text-default, #1e293b);\r\n }\r\n\r\n .fx-tooltip-bottom {\r\n top: calc(100% + 6px);\r\n left: 50%;\r\n transform: translateX(-50%);\r\n bottom: auto;\r\n }\r\n .fx-tooltip-bottom::after {\r\n content: '';\r\n position: absolute;\r\n bottom: 100%;\r\n left: 50%;\r\n transform: translateX(-50%);\r\n border: 5px solid transparent;\r\n border-bottom-color: var(--fx-text-default, #1e293b);\r\n }\r\n\r\n .fx-tooltip-left {\r\n right: calc(100% + 6px);\r\n top: 50%;\r\n transform: translateY(-50%);\r\n left: auto;\r\n bottom: auto;\r\n }\r\n .fx-tooltip-left::after {\r\n content: '';\r\n position: absolute;\r\n top: 50%;\r\n left: 100%;\r\n transform: translateY(-50%);\r\n border: 5px solid transparent;\r\n border-left-color: var(--fx-text-default, #1e293b);\r\n }\r\n\r\n .fx-tooltip-right {\r\n left: calc(100% + 6px);\r\n top: 50%;\r\n transform: translateY(-50%);\r\n right: auto;\r\n bottom: auto;\r\n }\r\n .fx-tooltip-right::after {\r\n content: '';\r\n position: absolute;\r\n top: 50%;\r\n right: 100%;\r\n transform: translateY(-50%);\r\n border: 5px solid transparent;\r\n border-right-color: var(--fx-text-default, #1e293b);\r\n }\r\n `;\r\n}\r\n\r\n/**\r\n * Inicializa a diretiva fx-tooltip.\r\n * Deve ser chamado uma vez na aplicação.\r\n *\r\n * @example\r\n * import { defineFxTooltipDirective } from '@wrrdev/fenix-ui/tooltip';\r\n * defineFxTooltipDirective();\r\n */\r\nexport function defineFxTooltipDirective(): void {\r\n if (typeof window === 'undefined') return;\r\n if (document.readyState === 'loading') {\r\n document.addEventListener('DOMContentLoaded', () => {\r\n FxTooltipManager.getInstance();\r\n });\r\n } else {\r\n FxTooltipManager.getInstance();\r\n }\r\n}\r\n\r\n/**\r\n * Destrói a diretiva fx-tooltip e limpa todos os recursos.\r\n */\r\nexport function destroyFxTooltipDirective(): void {\r\n FxTooltipManager.getInstance().destroy();\r\n}\r\n\r\n"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { FxTooltip } from './tooltip';
|
|
2
|
-
|
|
2
|
+
import { defineFxTooltipDirective, destroyFxTooltipDirective } from './directive';
|
|
3
|
+
export { FxTooltip, defineFxTooltipDirective, destroyFxTooltipDirective };
|
|
3
4
|
declare global {
|
|
4
5
|
interface HTMLElementTagNameMap {
|
|
5
6
|
'fx-tooltip': FxTooltip;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/tooltip/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAmB,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/tooltip/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAmB,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAElF,OAAO,EAAE,SAAS,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,CAAC;AAI1E,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,YAAY,EAAE,SAAS,CAAC;KACzB;CACF"}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { defineFxTooltip } from "./tooltip.js";
|
|
2
2
|
import { FxTooltip } from "./tooltip.js";
|
|
3
|
+
import { defineFxTooltipDirective, destroyFxTooltipDirective } from "./directive.js";
|
|
3
4
|
defineFxTooltip();
|
|
4
5
|
export {
|
|
5
|
-
FxTooltip
|
|
6
|
+
FxTooltip,
|
|
7
|
+
defineFxTooltipDirective,
|
|
8
|
+
destroyFxTooltipDirective
|
|
6
9
|
};
|
|
7
10
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/components/tooltip/index.ts"],"sourcesContent":["import { FxTooltip, defineFxTooltip } from './tooltip';\n\nexport { FxTooltip };\
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/tooltip/index.ts"],"sourcesContent":["import { FxTooltip, defineFxTooltip } from './tooltip';\r\nimport { defineFxTooltipDirective, destroyFxTooltipDirective } from './directive';\r\n\r\nexport { FxTooltip, defineFxTooltipDirective, destroyFxTooltipDirective };\r\n\r\ndefineFxTooltip();\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n 'fx-tooltip': FxTooltip;\r\n }\r\n}\r\n"],"names":[],"mappings":";;;AAKA,gBAAA;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../../src/core/presets.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AAE9D,MAAM,WAAW,WAAW;IAC1B,kDAAkD;IAClD,IAAI,EAAE,MAAM,CAAC;IACb,uDAAuD;IACvD,KAAK,EAAE,MAAM,CAAC;IACd,6DAA6D;IAC7D,MAAM,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;CAClC;AAaD,eAAO,MAAM,YAAY;;;;;;;;
|
|
1
|
+
{"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../../src/core/presets.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AAE9D,MAAM,WAAW,WAAW;IAC1B,kDAAkD;IAClD,IAAI,EAAE,MAAM,CAAC;IACb,uDAAuD;IACvD,KAAK,EAAE,MAAM,CAAC;IACd,6DAA6D;IAC7D,MAAM,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;CAClC;AAaD,eAAO,MAAM,YAAY;;;;;;;;CA8Ff,CAAC;AAEX,mEAAmE;AACnE,wBAAgB,WAAW,IAAI,WAAW,EAAE,CAE3C;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,WAAW,CAAC,WAAW,CAAC,GAC/B,WAAW,CAEb;AAED;;;GAGG;AACH,wBAAgB,WAAW,CACzB,UAAU,EAAE,MAAM,EAClB,IAAI,GAAE,OAAO,GAAG,MAAgB,GAC/B;IAAE,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAI7C"}
|
package/dist/core/presets.js
CHANGED
|
@@ -14,23 +14,44 @@ const themePresets = {
|
|
|
14
14
|
name: "seiya",
|
|
15
15
|
label: "Seiya",
|
|
16
16
|
tokens: {
|
|
17
|
-
color: {
|
|
18
|
-
|
|
17
|
+
color: {
|
|
18
|
+
primary: "#e11d48",
|
|
19
|
+
secondary: "#fb7185",
|
|
20
|
+
info: "#f43f5e",
|
|
21
|
+
danger: "#be123c"
|
|
22
|
+
},
|
|
23
|
+
radius: { sm: "6px", md: "10px", lg: "16px" },
|
|
24
|
+
effect: {
|
|
25
|
+
"focus-ring": "none"
|
|
26
|
+
}
|
|
19
27
|
}
|
|
20
28
|
}),
|
|
21
29
|
shiryu: register({
|
|
22
30
|
name: "shiryu",
|
|
23
31
|
label: "Shiryu",
|
|
24
32
|
tokens: {
|
|
25
|
-
color: {
|
|
26
|
-
|
|
33
|
+
color: {
|
|
34
|
+
primary: "#0d9488",
|
|
35
|
+
secondary: "#2dd4bf",
|
|
36
|
+
success: "#059669",
|
|
37
|
+
info: "#14b8a6"
|
|
38
|
+
},
|
|
39
|
+
radius: { sm: "4px", md: "8px", lg: "14px" },
|
|
40
|
+
effect: {
|
|
41
|
+
"focus-ring": "none"
|
|
42
|
+
}
|
|
27
43
|
}
|
|
28
44
|
}),
|
|
29
45
|
hyoga: register({
|
|
30
46
|
name: "hyoga",
|
|
31
47
|
label: "Hyoga",
|
|
32
48
|
tokens: {
|
|
33
|
-
color: {
|
|
49
|
+
color: {
|
|
50
|
+
primary: "#0284c7",
|
|
51
|
+
secondary: "#38bdf8",
|
|
52
|
+
info: "#06b6d4",
|
|
53
|
+
danger: "#e11d48"
|
|
54
|
+
},
|
|
34
55
|
surface: { surface: "#f0f9ff", "surface-hover": "#e0f2fe" },
|
|
35
56
|
radius: { sm: "8px", md: "12px", lg: "18px" }
|
|
36
57
|
}
|
|
@@ -39,7 +60,12 @@ const themePresets = {
|
|
|
39
60
|
name: "shun",
|
|
40
61
|
label: "Shun",
|
|
41
62
|
tokens: {
|
|
42
|
-
color: {
|
|
63
|
+
color: {
|
|
64
|
+
primary: "#db2777",
|
|
65
|
+
secondary: "#f472b6",
|
|
66
|
+
info: "#ec4899",
|
|
67
|
+
warning: "#c026d3"
|
|
68
|
+
},
|
|
43
69
|
radius: { sm: "10px", md: "14px", lg: "20px" }
|
|
44
70
|
}
|
|
45
71
|
}),
|
|
@@ -47,7 +73,12 @@ const themePresets = {
|
|
|
47
73
|
name: "ikki",
|
|
48
74
|
label: "Ikki",
|
|
49
75
|
tokens: {
|
|
50
|
-
color: {
|
|
76
|
+
color: {
|
|
77
|
+
primary: "#ea580c",
|
|
78
|
+
secondary: "#fb923c",
|
|
79
|
+
danger: "#dc2626",
|
|
80
|
+
warning: "#f59e0b"
|
|
81
|
+
},
|
|
51
82
|
radius: { sm: "2px", md: "4px", lg: "6px" }
|
|
52
83
|
}
|
|
53
84
|
}),
|
|
@@ -55,8 +86,16 @@ const themePresets = {
|
|
|
55
86
|
name: "aiolia",
|
|
56
87
|
label: "Aiolia",
|
|
57
88
|
tokens: {
|
|
58
|
-
color: {
|
|
59
|
-
|
|
89
|
+
color: {
|
|
90
|
+
primary: "#b45309",
|
|
91
|
+
secondary: "#f59e0b",
|
|
92
|
+
warning: "#eab308",
|
|
93
|
+
info: "#84cc16"
|
|
94
|
+
},
|
|
95
|
+
radius: { sm: "6px", md: "12px", lg: "20px" },
|
|
96
|
+
effect: {
|
|
97
|
+
"focus-ring": "none"
|
|
98
|
+
}
|
|
60
99
|
}
|
|
61
100
|
})
|
|
62
101
|
};
|