unicon 2.0.0 → 3.1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4800ddbc978f0ff31b33ddf14c4ee945d73c55bcc87d406b02ccf82512bb216c
4
- data.tar.gz: 1988c2f1eb3716f24c13ac8695164971a9c67d1ab2a14809bc5973b16091c465
3
+ metadata.gz: 5c9635070a63b840e20b7e51755198697296718e535e14edea34b74cb2d6bc8e
4
+ data.tar.gz: f35612aac948fbdb438db33c70e188896ff1800617bd678359d6c2c7cc98b502
5
5
  SHA512:
6
- metadata.gz: 05f88df8e2994f178a8898cb29a7d94240cdeca745d3dcf2ae4b0bbdd871b8348527c2ee5a3f2e96f3a63819f9a445ebd81b2e538bbf9c717505d6426c54a9ac
7
- data.tar.gz: a052a6f52d493dd8defe5bac10bc90e16c16f19e2eb26962b836e8516e5f23681273d6f2975a0e9b00dc991b0e14e51c650f8270ed73b6de44a6164eac81abf6
6
+ metadata.gz: 3f87101bc6811b27daec39c94b22e03874d8d30f738fbc6afbaf788cf58cf480e2aa053919baa228f713177bbcc161f0bceebb73060dad7a5595c1168c098f8b
7
+ data.tar.gz: 11980bc5228bb31e91ee1cc1ca1051aaef7eea0dd1e45f6cc0446cae2eecf83838e502a37a8abdae48e0cf2c1e13009733d4a7a99a4547e7a74ac08f4189587a
data/CHANGELOG.md CHANGED
@@ -3,6 +3,34 @@
3
3
  Every entry says whether it is a fix, a feature or a breaking change, since that is
4
4
  what decides both whether a reader can take it and what the next version number is.
5
5
 
6
+ ## [3.1.0] - 2026-08-19
7
+
8
+ - **Feature.** `:bookmarked` is the state beside `:bookmark`'s action, so a list can
9
+ draw a row somebody has kept apart from one they have not. A variant axis would have
10
+ made all 171 concepts answer whether they fill; two concepts answer only for
11
+ themselves. Android names it `bookmark_added` rather than a filled bookmark, Material
12
+ Symbols Outlined having no filled name to give — fill there is a font axis. 307 names
13
+ now resolve, 135 of them aliases.
14
+
15
+ ## [3.0.0] - 2026-08-15
16
+
17
+ - **Breaking.** `Unicon.actions` is documented as the doing words, but a third of it
18
+ named pictures instead: a caller asking for `:trash` was naming the bin rather than
19
+ the deletion. Thirteen now read as the deed — `plus` is `add`, `minus` `subtract`,
20
+ `check` `confirm`, `pencil` `edit`, `trash` `delete`, `scissors` `cut`, `person_add`
21
+ `add_member`, `person_remove` `remove_member`, `ellipsis` `truncate`, `menu`
22
+ `open_menu`, `sidebar` `toggle_sidebar`, `printer` `print`, and `eye_slash` `hide`.
23
+ - **Breaking.** The eight directional names take verbs too, and deliberately different
24
+ ones, so the two pictures stay apart by their names alone. Every chevron is a `move`:
25
+ `chevron_up` is `move_up`, and the same for down, left and right. Every arrow is a
26
+ `point`: `arrow_up` is `point_up`, and the same three again.
27
+ - `power` is the one name left in `ACTIONS` that is a thing rather than a deed. It is
28
+ drawn the same whether it turns something on or off, so a verb would assert a
29
+ direction the picture does not.
30
+ - Nothing else moved. No alias pointed at a renamed name, so `:export`, `:import`,
31
+ `:sync` and `:subscription` still borrow the download, the upload, the refresh and
32
+ the repeat, and 306 names resolve as before, 135 of them aliases.
33
+
6
34
  ## [2.0.0] - 2026-08-15
7
35
 
8
36
  - **Breaking.** `:brand` and `:franchise` were both `:building` aliases, so a sidebar
data/README.md CHANGED
@@ -22,11 +22,18 @@ The keys are symbols and the names are frozen strings: a name is on its way into
22
22
  `"bi bi-#{icon}"` or into JSON either way, and `person.crop.circle` is a string long
23
23
  before it is a symbol.
24
24
 
25
- ## Installation
25
+ ## How to install
26
26
 
27
- ```ruby
28
- gem 'unicon'
29
- ```
27
+ To install on your system, run
28
+
29
+ gem install unicon
30
+
31
+ To use inside a bundled Ruby project, add this line to the Gemfile:
32
+
33
+ gem 'unicon', '~> 3.0'
34
+
35
+ Since the gem follows [Semantic Versioning](http://semver.org), indicating `~> *major*.*minor*`
36
+ guarantees your project won’t occur in breaking changes whenever you `bundle update`.
30
37
 
31
38
  ## The three keys
32
39
 
@@ -56,9 +63,9 @@ blank. A concept may be given as a string, so `Unicon['contact']` works too.
56
63
  ## Three lists, and which one you want
57
64
 
58
65
  ```ruby
59
- Unicon.icons # => [:account, :airplane, :alarm, :archive, :award, :badge, ...] 127
60
- Unicon.names # => [:account, :address, :agent, :airplane, :alarm, :alert, ...] 303
61
- Unicon.actions # => [:arrow_down, :arrow_left, :arrow_right, :arrow_up, ...] 42
66
+ Unicon.icons # => [:account, :airplane, :alarm, :archive, :award, :badge, ...] 129
67
+ Unicon.names # => [:account, :add, :add_member, :address, :agent, ...] 306
68
+ Unicon.actions # => [:add, :add_member, :close, :confirm, ...] 42
62
69
  ```
63
70
 
64
71
  - `Unicon.icons` is **one name per distinct picture**. No two entries draw the same
@@ -66,9 +73,12 @@ Unicon.actions # => [:arrow_down, :arrow_left, :arrow_right, :arrow_up, ...]
66
73
  - `Unicon.names` is **the union of all three groups** — the icons, the actions and the
67
74
  model synonyms — and so every name that resolves. Ask for it to find out whether a
68
75
  name draws something; ask for `icons` when somebody is choosing one.
69
- - `Unicon.actions` is **the doing words**: `close`, `pencil`, every chevron. A toolbar
76
+ - `Unicon.actions` is **the doing words**: `close`, `edit`, every `move`. A toolbar
70
77
  needs them and `Unicon[:close]` answers, but nobody has a Close model, so `icons`
71
- leaves them out on purpose.
78
+ leaves them out on purpose. Each names the deed rather than the picture of it — `add`
79
+ rather than `plus`, `delete` rather than `trash` — bar `power`, which is drawn the same
80
+ whether it turns something on or off. The four chevrons are `move_up` and its three
81
+ directions, the four arrows `point_up` and its three, so the families stay apart.
72
82
 
73
83
  All three are frozen, sorted arrays of symbols; only what `fetch` returns is strings.
74
84
  `Unicon::ICONS`, `Unicon::TABLE` and `Unicon::ACTIONS` are the tables behind them, for a
@@ -77,7 +87,7 @@ caller who wants the pictures as well as the names.
77
87
  ## Model names
78
88
 
79
89
  A host app looks an icon up by the name of the model it is rendering, and the more names
80
- answer, the less any app has to declare. 134 of them borrow the icons of a concept —
90
+ answer, the less any app has to declare. 131 of them borrow the icons of a concept —
81
91
  `:user` takes the person, `:zip` takes the pin — and the Aliases column of the table below
82
92
  says which took which. They resolve without swelling the list a picker offers.
83
93
 
@@ -97,11 +107,11 @@ licenses them for developing applications for Apple-branded products, and this r
97
107
  is part of building one. They may not be redistributed for any other purpose, so anyone
98
108
  reusing this gem outside that context should show the names alone.
99
109
 
100
- The cells hold the icon and not its name, so the table stays readable at 127 rows. **The
110
+ The cells hold the icon and not its name, so the table stays readable at 129 rows. **The
101
111
  name each system uses is on the icon**: hover it, or reach it with a screen reader, and
102
112
  `Unicon[:search][:ios]` reads back as `magnifyingglass`.
103
113
 
104
- The 42 action icons are not in the table. They are fetchable — `Unicon[:pencil]` answers
114
+ The 42 action icons are not in the table. They are fetchable — `Unicon[:edit]` answers
105
115
  — but they name what an app does rather than what it has, and this table is `Unicon.icons`
106
116
  drawn out. `Unicon.actions` names them all.
107
117
 
@@ -124,6 +134,7 @@ drawn out. `Unicon.actions` names them all.
124
134
  | `:bolt` | | ![lightning](vendor/bootstrap-icons/lightning.svg "lightning") | ![bolt](vendor/sf-symbols/bolt.svg "bolt") | ![bolt](vendor/material-symbols/bolt.svg "bolt") |
125
135
  | `:book` | | ![book](vendor/bootstrap-icons/book.svg "book") | ![book](vendor/sf-symbols/book.svg "book") | ![book](vendor/material-symbols/book.svg "book") |
126
136
  | `:bookmark` | | ![bookmark](vendor/bootstrap-icons/bookmark.svg "bookmark") | ![bookmark](vendor/sf-symbols/bookmark.svg "bookmark") | ![bookmark](vendor/material-symbols/bookmark.svg "bookmark") |
137
+ | `:bookmarked` | | ![bookmark-fill](vendor/bootstrap-icons/bookmark-fill.svg "bookmark-fill") | ![bookmark.fill](vendor/sf-symbols/bookmark.fill.svg "bookmark.fill") | ![bookmark_added](vendor/material-symbols/bookmark_added.svg "bookmark_added") |
127
138
  | `:box` | `:inventory` `:item` `:package` `:product` | ![box](vendor/bootstrap-icons/box.svg "box") | ![shippingbox](vendor/sf-symbols/shippingbox.svg "shippingbox") | ![inventory_2](vendor/material-symbols/inventory_2.svg "inventory_2") |
128
139
  | `:brand` | | ![c-circle](vendor/bootstrap-icons/c-circle.svg "c-circle") | ![c.circle](vendor/sf-symbols/c.circle.svg "c.circle") | ![copyright](vendor/material-symbols/copyright.svg "copyright") |
129
140
  | `:briefcase` | `:provider` | ![briefcase](vendor/bootstrap-icons/briefcase.svg "briefcase") | ![briefcase](vendor/sf-symbols/briefcase.svg "briefcase") | ![work](vendor/material-symbols/work.svg "work") |
@@ -1,21 +1,21 @@
1
1
  module Unicon
2
2
  # Changing a record, or what is shown of it
3
3
  EDITING = {
4
- plus: { bootstrap: 'plus', ios: 'plus', android: 'add' },
5
- minus: { bootstrap: 'dash', ios: 'minus', android: 'remove' },
6
- check: { bootstrap: 'check', ios: 'checkmark', android: 'check' },
4
+ add: { bootstrap: 'plus', ios: 'plus', android: 'add' },
5
+ subtract: { bootstrap: 'dash', ios: 'minus', android: 'remove' },
6
+ confirm: { bootstrap: 'check', ios: 'checkmark', android: 'check' },
7
7
  close: { bootstrap: 'x', ios: 'xmark', android: 'close' },
8
- pencil: { bootstrap: 'pencil', ios: 'pencil', android: 'edit' },
9
- trash: { bootstrap: 'trash', ios: 'trash', android: 'delete' },
8
+ edit: { bootstrap: 'pencil', ios: 'pencil', android: 'edit' },
9
+ delete: { bootstrap: 'trash', ios: 'trash', android: 'delete' },
10
10
  copy: { bootstrap: 'copy', ios: 'doc.on.doc', android: 'content_copy' },
11
- scissors: { bootstrap: 'scissors', ios: 'scissors', android: 'content_cut' },
11
+ cut: { bootstrap: 'scissors', ios: 'scissors', android: 'content_cut' },
12
12
  undo: { bootstrap: 'arrow-counterclockwise', ios: 'arrow.uturn.backward', android: 'undo' },
13
13
  refresh: { bootstrap: 'arrow-clockwise', ios: 'arrow.clockwise', android: 'refresh' },
14
14
  sort: { bootstrap: 'sort-down', ios: 'arrow.up.arrow.down', android: 'sort' },
15
15
  zoom_in: { bootstrap: 'zoom-in', ios: 'plus.magnifyingglass', android: 'zoom_in' },
16
16
  zoom_out: { bootstrap: 'zoom-out', ios: 'minus.magnifyingglass', android: 'zoom_out' },
17
- person_add: { bootstrap: 'person-plus', ios: 'person.badge.plus', android: 'person_add' },
18
- person_remove: {
17
+ add_member: { bootstrap: 'person-plus', ios: 'person.badge.plus', android: 'person_add' },
18
+ remove_member: {
19
19
  bootstrap: 'person-dash', ios: 'person.badge.minus', android: 'person_remove',
20
20
  },
21
21
  }.freeze
@@ -1,22 +1,22 @@
1
1
  module Unicon
2
2
  # Where a control leads, and what it opens
3
3
  POINTING = {
4
- chevron_up: { bootstrap: 'chevron-up', ios: 'chevron.up', android: 'keyboard_arrow_up' },
5
- chevron_down: {
4
+ move_up: { bootstrap: 'chevron-up', ios: 'chevron.up', android: 'keyboard_arrow_up' },
5
+ move_down: {
6
6
  bootstrap: 'chevron-down', ios: 'chevron.down', android: 'keyboard_arrow_down',
7
7
  },
8
- chevron_left: {
8
+ move_left: {
9
9
  bootstrap: 'chevron-left', ios: 'chevron.left', android: 'keyboard_arrow_left',
10
10
  },
11
- chevron_right: {
11
+ move_right: {
12
12
  bootstrap: 'chevron-right', ios: 'chevron.right', android: 'keyboard_arrow_right',
13
13
  },
14
- arrow_up: { bootstrap: 'arrow-up', ios: 'arrow.up', android: 'arrow_upward' },
15
- arrow_down: { bootstrap: 'arrow-down', ios: 'arrow.down', android: 'arrow_downward' },
16
- arrow_left: { bootstrap: 'arrow-left', ios: 'arrow.left', android: 'arrow_back' },
17
- arrow_right: { bootstrap: 'arrow-right', ios: 'arrow.right', android: 'arrow_forward' },
18
- menu: { bootstrap: 'list', ios: 'line.3.horizontal', android: 'menu' },
19
- ellipsis: { bootstrap: 'three-dots', ios: 'ellipsis', android: 'more_horiz' },
20
- sidebar: { bootstrap: 'layout-sidebar', ios: 'sidebar.left', android: 'view_sidebar' },
14
+ point_up: { bootstrap: 'arrow-up', ios: 'arrow.up', android: 'arrow_upward' },
15
+ point_down: { bootstrap: 'arrow-down', ios: 'arrow.down', android: 'arrow_downward' },
16
+ point_left: { bootstrap: 'arrow-left', ios: 'arrow.left', android: 'arrow_back' },
17
+ point_right: { bootstrap: 'arrow-right', ios: 'arrow.right', android: 'arrow_forward' },
18
+ open_menu: { bootstrap: 'list', ios: 'line.3.horizontal', android: 'menu' },
19
+ truncate: { bootstrap: 'three-dots', ios: 'ellipsis', android: 'more_horiz' },
20
+ toggle_sidebar: { bootstrap: 'layout-sidebar', ios: 'sidebar.left', android: 'view_sidebar' },
21
21
  }.freeze
22
22
  end
@@ -5,6 +5,6 @@ module Unicon
5
5
  share: { bootstrap: 'share', ios: 'square.and.arrow.up', android: 'share' },
6
6
  download: { bootstrap: 'download', ios: 'arrow.down.circle', android: 'download' },
7
7
  upload: { bootstrap: 'upload', ios: 'arrow.up.circle', android: 'upload' },
8
- printer: { bootstrap: 'printer', ios: 'printer', android: 'print' },
8
+ print: { bootstrap: 'printer', ios: 'printer', android: 'print' },
9
9
  }.freeze
10
10
  end
@@ -10,7 +10,7 @@ module Unicon
10
10
  bootstrap: 'box-arrow-right', ios: 'rectangle.portrait.and.arrow.right', android: 'logout',
11
11
  },
12
12
  unlock: { bootstrap: 'unlock', ios: 'lock.open', android: 'lock_open' },
13
- eye_slash: { bootstrap: 'eye-slash', ios: 'eye.slash', android: 'visibility_off' },
13
+ hide: { bootstrap: 'eye-slash', ios: 'eye.slash', android: 'visibility_off' },
14
14
  power: { bootstrap: 'power', ios: 'power', android: 'power_settings_new' },
15
15
  }.freeze
16
16
  end
@@ -13,6 +13,7 @@ module Unicon
13
13
  star: { bootstrap: 'star', ios: 'star', android: 'star' },
14
14
  heart: { bootstrap: 'heart', ios: 'heart', android: 'favorite' },
15
15
  bookmark: { bootstrap: 'bookmark', ios: 'bookmark', android: 'bookmark' },
16
+ bookmarked: { bootstrap: 'bookmark-fill', ios: 'bookmark.fill', android: 'bookmark_added' },
16
17
  thumbs_up: { bootstrap: 'hand-thumbs-up', ios: 'hand.thumbsup', android: 'thumb_up' },
17
18
  thumbs_down: { bootstrap: 'hand-thumbs-down', ios: 'hand.thumbsdown', android: 'thumb_down' },
18
19
  trophy: { bootstrap: 'trophy', ios: 'trophy', android: 'trophy' },
@@ -1,4 +1,4 @@
1
1
  module Unicon
2
2
  # Version of the gem, read by the gemspec and by hosts checking compatibility.
3
- VERSION = '2.0.0'
3
+ VERSION = '3.1.0'
4
4
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: unicon
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 3.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - claudiob